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)。

我也阅读了这个解决方案,但是如果我在我的中声明一个 TextView Fragment,添加一个方法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

好的,最后我重新开始,并以此为基础编写了代码并且成功了。

于 2012-05-25T13:32:39.933 回答