Activity&&Fragment間転送
2181 ワード
githubアドレス
https://github.com/zhouxu88/Activity_Fragment_Data.git
1、setArgumentとgetArgument転送データはFragment作成時のみActivityからFramentに転送する
キー・コードActivity:
Fragment:
2、Fragmentの作成に成功した後、ActivityはFragmentにいくつかのインプリメンテーションを通知する*FragmentManagerを通じてFragmentインスタンスを見つけ、Fragmentインスタンスから対応するメソッドを呼び出す
Activity:
Fragment:
1.FragmentでgetActivity()でActivityインスタンスを取得し、Activityを呼び出す方法(推奨せず、結合性が強い)
2、インタフェースコールバック(推奨使用)
インタフェース:
Fragment:
Activity:
https://github.com/zhouxu88/Activity_Fragment_Data.git
一、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));
}
}