github地址
一、Activity向Fragment传递数据(2种方式)
1、setArgument和getArgument传递数据
只适用于Fragment创建的时候,从Activity给Frament传递数据
关键代码
Activity:
//向Fragment传递的数据
TestFragment fragment = new TestFragment();
Bundle bundle = new Bundle();
bundle.putString("key_data","Activity传递的初始化数据");
fragment.setArguments(bundle);
Fragment:
//初始化Fragment的数据
private void initData() {
String data = getArguments().getString("key_data");
if(!TextUtils.isEmpty(data)){
resultTv.setText(data); //设置Fragment的数据
Log.i("tag","data----------->"+data);
}
}
2、在Fragment创建成功后,Activity通知Fragment做某些实现*
通过FragmentManager找到Fragment实例,然后Fragment实例调用相应方法
Activity:
TestFragment testFragment = (TestFragment) fragmentManager.findFragmentByTag("TestFragment");
testFragment.update(count); //调用Fragment的方法传递数据
Fragment:
//供activity调用的方法,用于更新UI
public void update(int number){
resultTv.setText(String.valueOf(number));
}
二、Fragment向Activity传递数据:(2种方式)
1、在Fragment中通过getActivity()获取Activity实例,调用Activity的方法(不推荐,耦合性强)
MainActivity mainActivity = (MainActivity) getActivity();
mainActivity.reduce(count); //调用Activity的方法,向Activity传递数据
2、接口回调(推荐使用)
交互的接口:
public interface IReduceListener {
void update(int count);
}
Fragment:
private IReduceListener listener;
//向activity传递数据
listener.reduce(count);
//供activity调用的方法
public void setIReduceListener(IReduceListener listener){
this.listener = listener;
}
Activity:
public class MainActivity extends AppCompatActivity implements IReduceListener{
TestFragment fragment = new TestFragment();
fragment.setIReduceListener(this); //把接口对象传递给Fragment
//Fragment回传的数据的回调的方法
@Override
public void reduce(int count) {
//设置回传的数据
resultTv.setText(String.valueOf(count));
}
}