2 つのフラグメントを持つアクティビティがあります。現在、一度に 1 つのフラグメントのみが表示されるポートレート モード用に設計されています。アプリに ViewPager と Actionbar があります。
最初の(メイン)フラグメントにはボタンがあります。これをクリックすると、テキスト ボックスまたは他のフラグメントのグラフビューを更新する必要があります。
これに関する多くの記事やスレッドを調べましたが、ラスト マイルの接続が失われているようです。ここに私の現在の地位のいくつかの詳細があります:
- FragmentStatePagerAdapter を使用しています
- 現在、getItemPosition を POSITION_NONE にオーバーライドしています。後でこれを最適化する予定です。
- フラグメント間の通信は、インターフェイスを介してアクティビティを介して行われます
問題は、ボタンをクリックすると、PageAdapter を介して送信している新しい値が Fragment に渡されていないように見えることです。
アダプタ:
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
public String graphLink = "Last 24 Hours";
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a DummySectionFragment (defined as a static inner class
// below) with the page number as its lone argument.
Fragment fragment = null;
Bundle args = null;
switch (position) {
case 0:
fragment = new FragmentMain();
args = new Bundle();
args.putInt(FragmentMain.ARG_SECTION_NUMBER, position + 1);
break;
case 1:
fragment = new FragmentGraph();
args = new Bundle();
args.putInt(FragmentGraph.ARG_SECTION_NUMBER, position + 1);
args.putString(FragmentGraph.linkGraph, graphLink);
break;
}
fragment.setArguments(args);
return fragment;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
メインフラグメントのボタンをクリックすると、リスナーメソッドのアクティビティまで更新された値を取得しています。そこで私は以下をやろうとしています:
SectionsPagerAdapter sa = (SectionsPagerAdapter) mViewPager
.getAdapter();
sa.graphLink = link;
sa.notifyDataSetChanged();
mViewPager.setAdapter(sa);
mViewPager.setCurrentItem(1);
これは、グラフ フラグメントのパブリック変数を更新する必要があります。その変数は、作成中にテキストフィールドなどを更新するために使用されている必要があります。しかし、グラフリンクが通過していないように見えるため、この最後の部分は機能していません。
これは、私のグラフ フラグメントの主要部分のスニペットです。
public class FragmentGraph extends Fragment {
public static final String linkGraph = "Graph heading";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
TextView graphHeader = (TextView) rootView.findViewById(R.id.graphHead);
graphHeader.setText(linkGraph);
}
}
私は何が欠けていますか?私には最後のレグでばかげたことをしているように見えます。これは、別のフラグメントからフラグメントを更新する正しいアプローチですか?