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));
}
}