ActivityとFragment間のデータインタラクション
2696 ワード
ActivityとFragment間のデータインタラクションは2つのケースに分けられる1、ActivityがFragmentにデータを渡し、FragmentがActivityにデータを渡す
一、ActivityをFragmentにデータを転送するには2つの方法がある
そしてFragmentのonAttachで呼び出します
2.Bundleを使用してパラメータを渡すのが最も一般的です
Activityで送信
Fragmentで受信
二、FragmentがActivityにデータを転送FragmentのデータをActivityに転送するには、Fragmentがコールバックインタフェースを定義し、インタフェースに実装方法を追加し、Fragmentでこの方法を呼び出し、Fragmentのコードを転送する必要がある.
ホストActivity implementsというインタフェース、Activityのコード
また、ActivityとActivityの間のデータ転送方法は、Intent、Bundle、さらにFragmentとFragmentの間のデータ転送をインタフェースコールバックする方法が多い
一、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の間のデータ転送をインタフェースコールバックする方法が多い