Android 개발에 익숙하지 않아 클릭 가능한 ListView를 만들려고합니다. 그리고 그 요소를 클릭하면 elememnt의 텍스트가있는 조각이 표시됩니다. 그러나 FragmentTransaction을 두 번 커밋 할 수 없기 때문에 작동하지 않는 것 같습니다. 내가 "사용하려고했습니다Android FragmentTransaction이 두 번 커밋됩니다.
public class MyActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
final FragmentManager fManager = getFragmentManager();
final FragmentTransaction fTransaction = fManager.beginTransaction();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
Random rand = new Random(); // Randomizer
ArrayList Array = new ArrayList(5); // Array
for(int i = 0; i < 8; i++)
{
Array.add(rand.nextInt(30));
}
ArrayAdapter<String> MyAdapter =
new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, Array);
final ListView listview = (ListView)findViewById(R.id.MyList);
listview.setAdapter(MyAdapter);
final MyFragment MyFrag = new MyFragment();
fTransaction.add(R.id.FragmentContainer, MyFrag);
fTransaction.commit();
AdapterView.OnItemClickListener itemListener = new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
String Selection = parent.getItemAtPosition(position).toString();
MyFrag.SetText(Selection);
fTransaction.remove(MyFrag);
fTransaction.add(R.id.FragmentContainer, MyFrag);
fTransaction.commit();
}
};
listview.setOnItemClickListener(itemListener);
}
: 그리고 먼저 조각 contrainer에 조각을 추가 할 수 없습니다, 따라서 당신이 조각의 텍스트를 변경할 수 없습니다 커밋없이 = (
여기 내 활동 코드입니다
public class MyFragment extends Fragment
{
TextView textView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View myInflatedView = inflater.inflate(R.layout.fragment_my_first, container, false);
textView = (TextView) myInflatedView.findViewById(R.id.MyFragView);
if (textView == null)
{
System.out.println("myInflatedView == null");
}
return inflater.inflate(R.layout.fragment_my_first, null);
}
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
Toast.makeText(getActivity(), "You have attached a fragment",
Toast.LENGTH_SHORT).show();
}
public void SetText(String text)
{
if(textView == null)
{
System.out.println("textView == null");
}
textView.setText(text);
}
}
:
여기
" java.lang.IllegalStateException: commit already called "
내 조각 코드입니다 : 그것은 말한다 ... 교체 "하지만 결과는 동일
하드로드 코드의 막대한 팩 = (
제거 할
onItemClick
내부의 새로운FragmentTransaction
만들어야합니다'하여 FragmentTransaction fTransaction = fManager.beginTransaction를();'? – Rishka오른쪽. 귀하의 경우, 항목을 클릭 할 때마다 새 트랜잭션을 작성해야합니다. 커밋 한 후에 트랜잭션을 재사용 할 수 없다. (나는 생각한다) –
맞다. –