2014-12-27 2 views
0

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 " 

내 조각 코드입니다 : 그것은 말한다 ... 교체 "하지만 결과는 동일

하드로드 코드의 막대한 팩 = (

답변

1

새 트랜잭션을 시작해야하며 이전 트랜잭션을 이미 커밋했기 때문에 이전 트랜잭션을 사용하지 않아야합니다.

+0

제거 할 onItemClick 내부의 새로운 FragmentTransaction 만들어야합니다'하여 FragmentTransaction fTransaction = fManager.beginTransaction를();'? – Rishka

+0

오른쪽. 귀하의 경우, 항목을 클릭 할 때마다 새 트랜잭션을 작성해야합니다. 커밋 한 후에 트랜잭션을 재사용 할 수 없다. (나는 생각한다) –

+0

맞다. –

0

아니라, 당신은 기존의 조각이 같이

관련 문제