2

内に同じクラスに基づく複数のフラグメントが必要な Android アプリケーションを開発していますFragmentActivity。今のところ、私のコードはほとんどが公式ドキュメントのこの例に基づいていますが、各フラグメントに対して同じクラスをインスタンス化しています:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.fragment_tabs_pager);
    mTabHost = (TabHost)findViewById(android.R.id.tabhost);
    mTabHost.setup();

    mViewPager = (ViewPager)findViewById(R.id.pager);

    mTabsAdapter = new TabsAdapter(this, mTabHost, mViewPager);

    mTabsAdapter.addTab(mTabHost.newTabSpec("tab1").setIndicator("Tab 1"), MyFragment.class, null);
    mTabsAdapter.addTab(mTabHost.newTabSpec("tab2").setIndicator("Tab 2"), MyFragment.class, null);
    mTabsAdapter.addTab(mTabHost.newTabSpec("tab3").setIndicator("Tab 3"), MyFragment.class, null);
    mTabsAdapter.addTab(mTabHost.newTabSpec("tab4").setIndicator("Tab 4"), MyFragment.class, null);

    if (savedInstanceState != null) {
        mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab"));
    }
}

クラスMyFragmentは非常に単純です。

public class MyFragment extends Fragment {

    View v;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        if (container == null) {
                return null;
        }

        v = inflater.inflate(R.layout.test, container, false);
        return v;
    }
}

Fragment クラスによって拡張されたレイアウトをシンプルな TextView に単純化しました。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

<TextView
    android:id="@+id/test_textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/some_default_value"
    android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

つまり、インスタンス化された後test_textView1、各フラグメントの値を個別に変更できるようにしたいと考えています。私の問題は、フラグメントのレイアウトの要素にアクセスできないことです。すべてのフラグメントに影響するため、このメソッドを直接使用することはできません。クラス内で、単一のフラグメントにアクセスしてから、次のようにしてそのビューにアクセスしようとしました。findViewById()TabsAdapter

getItem(number).getView();

しかし、それは戻りますnull。(getItem()正しいフラグメントをgetView()返しますが、null を返します)。

私もこの解決策を読みましたが、自分Fragmentで TextView を宣言すると、メソッドを追加しsetTextView(String s)てから呼び出すとFragmentActivity、NullPointerException が生成されます。

では、フラグメント内のレイアウト項目に個別にアクセスする特定の方法はありますか? ありがとう!

4

3 に答える 3

2

フラグメントがある場合: frag1、frag2、frag3 など。各フラグメントは同じクラスを拡張するため、frag1.getView().findViewById() を使用してスコープをそのフラグメントだけに制限できます。

例:

TextView frag1text = (TextView)frag1.getView().findViewById();
于 2012-05-24T13:07:00.983 に答える
0

フラグメントのonCreateViewで、ビューへのポインターを保存することを忘れないでください。そうすれば、いつでもmyPointer.findViewById();と言うことができます。ビューのサブアイテムを取得するため。

于 2012-05-24T13:06:47.413 に答える
0

最後に、最初からやり直して、コードをthisに基づいて作成したところ、うまくいきました。

于 2012-05-25T13:32:39.933 に答える