外部インターフェイスを使用して、アクティビティとフラグメント間でデータを渡すことができます。フラグメント間で直接話すべきではなく、アクティビティをプロキシとして使用するべきです。以下の例:
MainActivity.java
public class MainActivity extends AppCompatActivity implements InteractionInterface {
private ViewPager viewPager;
private MyAdapter adapter;
@Override
public void onCreate(Bundle instance) {
super.onCreate(instance);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.viewPager);
adapter = new MyAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
}
private class MyAdapter extends FragmentStatePagerAdapter {
private FragmentA fragmentA;
private FragmentB fragmentB;
public MyAdapter(FragmentManager fm) {
super(fm);
fragmentA = new FragmentA();
fragmentB = new FragmentB();
}
@Override
public Fragment getItem(int position) {
return position == 0 ? fragmentA : fragmentB;
}
@Override
public int getCount() {
return 2;
}
}
@Override
public void onClick() {
// this comes from InteractionInterface
if(adapter.fragmentB.isAdded()) {
adapter.fragmentB.doSomething("yeah!!");
}
}
}
FragmentA.java
public class FragmentA extends Fragment {
private Button button;
private InteractionInterface interface = null;
@Override
public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_a, container, false);
button.setOnClickListener(new OnClickListener() {
public void onClick(final View v) {
if(interface != null) {
// you can modify this interface to pass some data
interface.onClick();
}
}
});
return rootView;
}
public void onAttach(Activity a) {
super.onAttach(a);
if (a instanceof InteractionInterface) {
interface = (InteractionInterface) a;
}
}
public void onDetach() {
super.onDetach();
interface = null;
}
}
FragmentB.java
public class FragmentB extends Fragment {
...
public void doSomething(String something) {
// do stuff here
}
}
InteractionInterface.java
public interface InteractionInterface {
void onClick();
}
コードを投稿できますか? – pawelo
フラグメントAのアイテムに触れることでフラグメントBを更新する考えはありますか?私はgoogleでたくさんの検索をしましたが、うまくいきません。 Plsヘルプ – user6478182
私の答えを見て – pawelo