0
我有兩個片段A和B和接口溝通的A到B,片段A有一個按鈕和溝通與B改變文本,但每當方向改變按鈕失去它的聽衆 她是代碼旋轉後丟失它的監聽器
MainActivtiy
public class MainActivity extends AppCompatActivity implements ClicktoChange{
FragmentB fragmentB;
FragmentA fragmentA;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentB = new FragmentB();
fragmentA = new FragmentA();
FragmentTransaction fr = getFragmentManager().beginTransaction();
fr.add(R.id.container2,fragmentA);
fr.add(R.id.container,fragmentB);
fr.addToBackStack(null);
fr.commit();
}
@Override
protected void onResume() {
super.onResume();
Log.d("im","in Resume");
FragmentTransaction fr = getFragmentManager().beginTransaction();
fr.replace(R.id.container2, fragmentA);
fr.replace(R.id.container, fragmentB);
fr.addToBackStack(null);
fr.commit();
}
@Override
public void changeTheText(String str) {
Log.d("we are in main clicked ", "yay");
fragmentB.changeText(str);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.container, fragmentB);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragmentTransaction.commit();
}
}
這裏是片段A
的代碼3210和B片段
public class FragmentB extends Fragment {
TextView Text;
String str;
public FragmentB() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
Log.d("frag b","Yes I'v been created");
View view = inflater.inflate(R.layout.fragment_fragment_b, container, false);
if(savedInstanceState!=null){
str = savedInstanceState.getString("text");
Text = (TextView) view.findViewById(R.id.textfrag);
Text.setText(str);
}
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Text = (TextView) getActivity().findViewById(R.id.textfrag);
Log.d("the text is ", (Text == null) + "");
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("text",str);
}
public void changeText(String str){
this.str = str;
Text.setText(str);
}
}
終於接口
public interface ClicktoChange {
void changeTheText(String str);
}
你可以在片段A中看到Activity創建的方法 我記錄了Log.d(「yay」,「interface init」); 這個方法在調用後也被調用,並且監聽器附着在按鈕上,但它工作,所以我在這裏使用第二個選項,但它不工作,我不知道爲什麼 –
也添加了'android:configChanges =「keyboardHidden | orientation」'但沒有任何工作,當我旋轉按鈕失去它的監聽器 –