Activity&&Fragment間転送

2181 ワード

githubアドレス
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));
    }
}