為什么點擊按鈕,TextView里面的文字沒有發生變化呢?
看log,可以看到正常切換fragment。為什么文字沒有改變?
這是MainActivity3的代碼:
public?class?MainActivity3?extends?Activity?{ ????private?Button?button; ????private?boolean?flag?=?true; ????@Override ????protected?void?onCreate(Bundle?savedInstanceState)?{ ????????super.onCreate(savedInstanceState); ????????setContentView(R.layout.main3); ????????/** ?????????*?設置fragment3顯示在layout3中 ?????????*/ ????????getFragmentManager().beginTransaction().add(R.id.layout3,?new?MyFragment3()).commit(); ????????button?=?(Button)?findViewById(R.id.cast); ????????/** ?????????*?設置點擊事件:如果當前顯示的是fragment3,則切換到fragment4; ?????????*?????????????如果當前顯示的是fragment4,則切換回fragment3 ?????????*/ ????????button.setOnClickListener(new?View.OnClickListener()?{ ????????????@Override ????????????public?void?onClick(View?v)?{ ????????????????FragmentTransaction?transaction?=?getFragmentManager().beginTransaction(); ????????????????MyFragment3?myFragment3?=?new?MyFragment3(); ????????????????MyFragment4?myFragment4?=?new?MyFragment4(); ????????????????if?(flag)?{ ????????????????????transaction.add(R.id.layout3,?myFragment4); ????????????????????flag?=?false; ????????????????}?else?{ ????????????????????transaction.add(R.id.layout3,?myFragment3); ????????????????????flag?=?true; ????????????????} ????????????????transaction.commit(); ????????????} ????????}); ????} }
這是MyFragment3的onCreateView方法:
@Override public?View?onCreateView(LayoutInflater?inflater,?ViewGroup?container,?Bundle?savedInstanceState)?{ ????Log.i("Main",?"[3]onCreateView()?---->>>?fragment所包含的所有view組件創建完成"); ????View?view?=?inflater.inflate(R.layout.fragment2,?container,?false); ????TextView?textView?=?(TextView)?view.findViewById(R.id.text2); ????textView.setText("第一個fragment"); ????return?view; }
這是MyFragment4的onCreateView方法:
@Override public?View?onCreateView(LayoutInflater?inflater,?ViewGroup?container,?Bundle?savedInstanceState)?{ ????Log.i("Main",?"[4]onCreateView()?---->>>?fragment所包含的所有view組件創建完成"); ????View?view?=?inflater.inflate(R.layout.fragment2,?container,?false); ????TextView?textView?=?(TextView)?view.findViewById(R.id.text2); ????textView.setText("第二個fragment"); ????return?view; }
這是main3.xml:
這是fragment2.xml
2016-07-20
2016-07-20
好了,已經找到問題所在了。原來是transaction調用錯了方法。應該調用replac方法,而我調用了add方法,導致兩個fragment同時顯示在屏幕上了。