為什么點(diǎn)擊按鈕,TextView里面的文字沒有發(fā)生變化呢?
看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); ????????/** ?????????*?設(shè)置fragment3顯示在layout3中 ?????????*/ ????????getFragmentManager().beginTransaction().add(R.id.layout3,?new?MyFragment3()).commit(); ????????button?=?(Button)?findViewById(R.id.cast); ????????/** ?????????*?設(shè)置點(diǎn)擊事件:如果當(dāng)前顯示的是fragment3,則切換到fragment4; ?????????*?????????????如果當(dāng)前顯示的是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組件創(chuàng)建完成"); ????View?view?=?inflater.inflate(R.layout.fragment2,?container,?false); ????TextView?textView?=?(TextView)?view.findViewById(R.id.text2); ????textView.setText("第一個(gè)fragment"); ????return?view; }
這是MyFragment4的onCreateView方法:
@Override public?View?onCreateView(LayoutInflater?inflater,?ViewGroup?container,?Bundle?savedInstanceState)?{ ????Log.i("Main",?"[4]onCreateView()?---->>>?fragment所包含的所有view組件創(chuàng)建完成"); ????View?view?=?inflater.inflate(R.layout.fragment2,?container,?false); ????TextView?textView?=?(TextView)?view.findViewById(R.id.text2); ????textView.setText("第二個(gè)fragment"); ????return?view; }
這是main3.xml:
這是fragment2.xml
2016-07-20
2016-07-20
好了,已經(jīng)找到問題所在了。原來是transaction調(diào)用錯(cuò)了方法。應(yīng)該調(diào)用replac方法,而我調(diào)用了add方法,導(dǎo)致兩個(gè)fragment同時(shí)顯示在屏幕上了。