gpt4 book ai didi

Android - 基于同一类的多个 fragment

转载 作者:行者123 更新时间:2023-11-29 00:39:01 27 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序,其中我需要有多个基于 FragmentActivity 中相同类的 fragment 。目前,我的代码主要基于 this example来自官方文档,除了我为每个 fragment 实例化相同的类:

@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>

所以,事情是,我希望能够在每个 fragment 中分别修改 test_textView1 的值,它们被实例化之后。我的问题是我无法访问 fragment 布局的元素。我不能直接使用 findViewById() 方法,因为它会影响所有 fragment 。在 TabsAdapter 类中,我尝试访问单个 fragment ,然后通过执行以下操作访问其 View :

getItem(number).getView();

但它返回 null。 (getItem() 返回正确的 fragment ,但 getView() 返回 null)。

我还读了this solution ,但是如果我在我的 Fragment 中声明一个 TextView,添加一个方法 setTextView(String s) 并从 FragmentActivity 调用它,它会生成一个 NullPointerException .

那么,有没有一种特定的方法可以单独访问我的 fragment 中的布局项?谢谢!

最佳答案

如果您有 fragment :frag1、frag2、frag3 等,您可以使用 frag1.getView().findViewById() 将范围限制为该 fragment ,因为每个 fragment 都扩展相同的类。

例子:

TextView frag1text = (TextView)frag1.getView().findViewById();

关于Android - 基于同一类的多个 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10738032/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com