public Back_popFragment(String title){
this.title=title;
}
如果使用上述构造函数的方式传参的话,在界面切换为横屏时Activity会被重新创建,这时会导致参数丢失,为了防止这种情况出现,应该使用下述传参方法:
//Fragment的传参方式
public static Back_popFragment getInstance(String Title){
Back_popFragment pop=new Back_popFragment();
Bundle b=new Bundle();
b.putString(Title,Title);
pop.setArguments(b);
return pop;
}
Fragment与Activity的交互
Fragment可以通过getActivity()函数访问Activity,可由此查找Activity中布局组件:View ListView=(ListView)getActivity().findViewById(R.Id.List);
Activity能够调用Fragment的函数findFragmentById()或者findFragmentByTag()从FragmentManager中获取Fragment
·
contextFragment= (ContextFragment) getFragmentManager().findFragmentById(R.id.content_fragment);
fragment需要与Activity共享事件时需要在Fragment中实现一个接口,并在宿主中实现它,当Activity通过接口接收回调时可以与其他fragment进行交互
列如通过menuFragment改变mainFragment中的TextView的值时:
menuFragment:
public class menueFragment extends Fragment implements View.OnClickListener{
private MyMenuListener myMenuListener;
public menueFragment() {
// Required empty public constructor
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
myMenuListener= (MyMenuListener) activity;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_menue, container, false);
view.findViewById(R.id.news).setOnClickListener(this);//为按钮添加监听
view.findViewById(R.id.music).setOnClickListener(this);//为按钮添加监听
return view;
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.news:
myMenuListener.changeValue("news");//调用接口中的方法改变mainFragment的值
break;
case R.id.music:
myMenuListener.changeValue("music");//调用接口中的方法改变mainFragment的值
break;
}
}
public static interface MyMenuListener{//定义接口,包含了改变值的方法
public void changeValue(String value);
}
}
MainActicity(实现menuFragment的接口)
public class Main3Activity extends AppCompatActivity implements menueFragment.MyMenuListener{
private menueFragment menueFragment=new menueFragment();
private mainFragment mainFragment=new mainFragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
menueFragment= (menueFragment) getFragmentManager().findFragmentById(R.id.manueFragment);
mainFragment= (mainFragment) getFragmentManager().findFragmentById(R.id.mainFragment);
}
@Override
public void changeValue(String value) {
mainFragment.changTextviewvalue(value);//调用mainFragment中的方法
}
}
public class mainFragment extends Fragment {
TextView tv;
public mainFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v= inflater.inflate(R.layout.fragment_main, container, false);
tv = (TextView) v.findViewById(R.id.value);//获取要改变的Textview
return v;
}
public void changTextviewvalue(String value){
tv.setText(value);
}
}