ActivityとFragment間のデータインタラクション

2696 ワード

ActivityとFragment間のデータインタラクションは2つのケースに分けられる1、ActivityがFragmentにデータを渡し、FragmentがActivityにデータを渡す
一、ActivityをFragmentにデータを転送するには2つの方法がある
1. Activity , static 
 public String getTitles(){
    return "hello world1";
}
public static String getTitles1(){
    return "hello world2";
}

そしてFragmentのonAttachで呼び出します
    @Override
       public void onAttach(Context context) {
           super.onAttach(context);
           titles = ((MainActivity)getActivity()).getTitles();
           titles2 = MainActivity.getTitles1();
       }

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       mView = (View) inflater.inflate(R.layout.list_fragment, container, false);
       TextView name= (TextView)mView.findViewById(R.id.name);
       name.setText(titles);
       TextView time= (TextView)mView.findViewById(R.id.time);
       time.setText(titles2);
       return mView;
   } 

2.Bundleを使用してパラメータを渡すのが最も一般的です
Activityで送信
  MyFragment myFragment = new MyFragment();
  Bundle bundle = new Bundle();
  bundle.putString("title",titles);// titles 
  myFragment.setArguments(bundle);

Fragmentで受信
Bundle bundle = getArguments();
        if(bundle!=null){
            titles = bundle.getString("title");
        }

二、FragmentがActivityにデータを転送FragmentのデータをActivityに転送するには、Fragmentがコールバックインタフェースを定義し、インタフェースに実装方法を追加し、Fragmentでこの方法を呼び出し、Fragmentのコードを転送する必要がある.
//  activity , activity
private CallBackInterface callBackInterface;

// activity 
public interface CallBackInterface {
    void gettValus(String str);
}
@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.name:
            callBackInterface.gettValus("hello1");
            break;
        case R.id.time:
            callBackInterface.gettValus("hello2");
            break;
        default:
            callBackInterface.gettValus("hello3");
    }

}

ホストActivity implementsというインタフェース、Activityのコード
   public class MainActivity extends BaseActivity implements ListsFragment.CallBackInterface{
   @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           initImgViews(R.layout.activity_main,this);// title 
           context = this;
       }
       @Override
       public void gettValus(String str) {
           mSigninTitle.setText(str);
       }
   }

また、ActivityとActivityの間のデータ転送方法は、Intent、Bundle、さらにFragmentとFragmentの間のデータ転送をインタフェースコールバックする方法が多い