3

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);
}
}

私は何が欠けていますか?私には最後のレグでばかげたことをしているように見えます。これは、別のフラグメントからフラグメントを更新する正しいアプローチですか?

4

1 に答える 1

1

わかりました、私の愚かな間違い。問題を引き起こしたのは静的な最終変数でした。私はそれをゲッター/セッターによって公開されたプライベート変数に変更しましたが、すべてが完全に機能しています。

于 2013-08-25T04:54:05.553 に答える