首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在TabActivity中访问TabActivity中的视图?

如何在TabActivity中访问TabActivity中的视图?
EN

Stack Overflow用户
提问于 2011-11-25 11:18:39
回答 2查看 1.1K关注 0票数 1

我有一个TabActivity,其中包含用于拆分表单的其他活动。TabActivity的布局中有一个按钮,用于从TabActivity中包含的所有活动中的所有与表单相关的视图中收集数据并存储这些数据。我遇到的问题是TabActivity似乎没有访问这些视图的权限;当我用其中一个视图调用findViewById()时,我得到了一个NullPointerException

关于TabActivity如何控制它所包含的活动的确切工作方式,文档似乎很少。如果它在从一个活动切换到另一个活动时破坏了它,我所处的情况将是有意义的。我想知道实现上述目标的最佳方法。

src/com/vendor/MyTabActivity.java:

代码语言:javascript
复制
public class MyTabActivity extends TabActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_tab_activity);
        final Button saveButton = (Button) findViewById(R.id.save_button);
        saveButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // NullPointerException happens here
                String fieldValue = ((TextView) findViewById(R.id.text_field)).getText().toString();
            }
        });
    }
}

res/layout/my_tab_activity.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost">
    <LinearLayout>
        <TabWidget android:id="@android:id/tabs"/>
        <FrameLayout android:id="@android:id/tabcontent" />
        <Button android:id="@+id/save_button"/>
    </LinearLayout>
</TabHost>

src/com/vendor/NestedActivity.java:

代码语言:javascript
复制
public class NestedActivity extends Activity {  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.nested_activity);
    }
}

res/layout/nested_activity.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android">  
    <RelativeLayout>
        <EditText android:id="@+id/text_field"/>
    </RelativeLayout>
</ScrollView>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-25 11:43:22

您的问题来自MyTabActivity中的这两行代码...

代码语言:javascript
复制
setContentView(R.layout.my_tab_activity);

...and...

代码语言:javascript
复制
String fieldValue = ((TextView) findViewById(R.id.text_field)).getText().toString();

你显然知道findViewById(R.id.text_field)是导致它的原因。

只有在尝试访问作为当前活动的一部分而膨胀的UI元素时,才能使用findViewById(...)。因为在my_tab_activity.xml中没有资源id为R.id.text_fieldTextView,所以它永远不会工作。

TabHost / TabActivity访问属于选项卡内容的活动是很棘手的。我的建议是使用SharedPreferences,它可以在你的应用程序中的任何地方访问。更改TextView (或任何其他用户输入项)后,使用标识它来自哪个活动/选项卡的“键”将其保存到SharedPreferences。从那时起,TabActivity可以轻松地整理数据。

票数 2
EN

Stack Overflow用户

发布于 2011-11-25 11:31:50

您可以使用getLocalActivityManager()getCurrentActivity()获取在选项卡活动中运行的活动的引用。对于您返回的activity对象,您可以执行activity.findViewById()来获取对特定activity中的视图的引用。但需要指出的是,TabActivity已被弃用,您应该使用Fragments来完成您正在寻找的功能。如果你的目标是一个早于3.0的安卓版本,你可以使用compatibility library来访问片段。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8264525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档