一:Activity向Fragment传值
用setArguments的方式
在Fragment的java文件中创建数据接受的代码
public static final String BUNDLE_TITLE = "bundle_title";
private String mTitle = "imooc";
创建一个新的静态方法
public static ListFragment newInstance(String title){
ListFragment fragment = new ListFragment();
Bundle bundle = new Bundle();
bundle.putString(BUNDLE_TITLE, title);
fragment.setArguments(bundle);
return fragment;
}
在oncrete方法中进行接收
if(getArguments() != null){
mTitle = getArguments().getString(BUNDLE_TITLE);
便可在oncreateView中更改代码为
textView.setText(mTitle);
最后在Activity中oncreate方法中传输数据为
二:Fragment向Activity中传值
没有好的方法,只能进行回调
1.在Fragment中创建回调接口
// 设置接口的方法
public void setOnTitleClickListener(OnTitleClickListener onTitleClickListener) {
mOnTitleClickListener = onTitleClickListener;
}
// 定义变量
private OnTitleClickListener mOnTitleClickListener;
// 定义接口
public interface OnTitleClickListener{
void onClick(String title);
}
2.在oncraeteView中创建一个点击回调的方法
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mOnTitleClickListener != null){
mOnTitleClickListener.onClick(mTitle);
}
}
});
3,在Activity中继承接口
public class MainActivity extends AppCompatActivity implements ListFragment.OnTitleClickListener{
4.修改此处的代码
ListFragment listFragment = ListFragment.newInstance("list");
getSupportFragmentManager()
.beginTransaction()
.add(R.id.listContainer, listFragment)
.commit();
listFragment.setOnTitleClickListener(this);
-
加入
public void onClick(String title) { setTitle(title); }
补充:如果要传递一个对象时应该
在Fragment中
private User mUser;
public void setUser(User user) {
mUser = user;
}
public class User {
}
public static ListFragment newInstance(String title, User user){
ListFragment fragment = new ListFragment();
Bundle bundle = new Bundle();
bundle.putString(BUNDLE_TITLE, title);
fragment.setArguments(bundle);
fragment.setUser(user);
return fragment;
}
便完成了对象的传递。