Fragment&&Fragment間で値を伝える2つの方法
3642 ワード
githubアドレス
https://github.com/zhouxu88/Fragment_Fragment_Data.git
1)定義データインタフェース2)Activityで実現し,インタフェースで定義したメソッド3)Fragment Aでインタフェースオブジェクトを宣言し,インタフェースでメソッド4)ActivityでのインタフェースコールバックでFragment Bにデータを渡す.
キー・コード・インタフェース:
AFragment:
Activity:
BFragment:
キーコードAFragment:
BFragment:
https://github.com/zhouxu88/Fragment_Fragment_Data.git
一、インタフェースを使用して、Activity宿主を中間橋渡しとして、データの相互作用を行う
1)定義データインタフェース2)Activityで実現し,インタフェースで定義したメソッド3)Fragment Aでインタフェースオブジェクトを宣言し,インタフェースでメソッド4)ActivityでのインタフェースコールバックでFragment Bにデータを渡す.
キー・コード・インタフェース:
public interface IAddListener {
void update(int count); //
}
AFragment:
public class AFragment extends Fragment {
private int count; // , Fragment B
private IAddListener listener;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_a, container, false);
initView(view);
return view;
}
// View
private void initView(View view) {
view.findViewById(R.id.btn_add).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 1, Fragment B
count++;
listener.update(count); //
this.listener = listener;
}
}
Activity:
public class MainActivity extends AppCompatActivity implements IAddListener{
private FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initFragment();
}
// Fragment
private void initFragment() {
fragmentManager = getSupportFragmentManager();
AFragment aFragment = new AFragment();
FragmentTransaction transaction =
fragmentManager.beginTransaction();
transaction.add(R.id.fragment_a,aFragment,"AFragment");
transaction.add(R.id.fragment_b,new BFragment(),"BFragment");
transaction.commit();
aFragment.setIAddListener(this); //
}
//
@Override
public void update(int count) {
BFragment bFragment = (BFragment) fragmentManager.findFragmentByTag("BFragment");
bFragment.update(count);
}
}
BFragment:
public class BFragment extends Fragment {
private TextView resultTv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_b, container, false);
initView(view);
return view;
}
// View
private void initView(View view) {
resultTv = (TextView) view.findViewById(R.id.result_tv);
}
// Activity
public void update(int count) {
resultTv.setText(String.valueOf(count));
}
}
二、EventBus伝値
キーコードAFragment:
EventBus.getDefault().post(Integer.valueOf(count));
BFragment:
@Overridepublic void onAttach(Context context) {
super.onAttach(context);
//
EventBus.getDefault().register(this);}
@Overridepublic void onDestroyView() {
super.onDestroyView(); //
EventBus.getDefault().unregister(this);
}
//
@Subscribe
public void onEvent(Integer count){
resultTv.setText(String.valueOf(count));
Toast.makeText(getContext(), " ", Toast.LENGTH_SHORT).show();
}