我有一个TabActivity,其中包含用于拆分表单的其他活动。TabActivity的布局中有一个按钮,用于从TabActivity中包含的所有活动中的所有与表单相关的视图中收集数据并存储这些数据。我遇到的问题是TabActivity似乎没有访问这些视图的权限;当我用其中一个视图调用findViewById()时,我得到了一个NullPointerException。
关于TabActivity如何控制它所包含的活动的确切工作方式,文档似乎很少。如果它在从一个活动切换到另一个活动时破坏了它,我所处的情况将是有意义的。我想知道实现上述目标的最佳方法。
src/com/vendor/MyTabActivity.java:
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:
<?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:
public class NestedActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nested_activity);
}
}res/layout/nested_activity.xml:
<?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>发布于 2011-11-25 11:43:22
您的问题来自MyTabActivity中的这两行代码...
setContentView(R.layout.my_tab_activity);...and...
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_field的TextView,所以它永远不会工作。
从TabHost / TabActivity访问属于选项卡内容的活动是很棘手的。我的建议是使用SharedPreferences,它可以在你的应用程序中的任何地方访问。更改TextView (或任何其他用户输入项)后,使用标识它来自哪个活动/选项卡的“键”将其保存到SharedPreferences。从那时起,TabActivity可以轻松地整理数据。
发布于 2011-11-25 11:31:50
您可以使用getLocalActivityManager()或getCurrentActivity()获取在选项卡活动中运行的活动的引用。对于您返回的activity对象,您可以执行activity.findViewById()来获取对特定activity中的视图的引用。但需要指出的是,TabActivity已被弃用,您应该使用Fragments来完成您正在寻找的功能。如果你的目标是一个早于3.0的安卓版本,你可以使用compatibility library来访问片段。
https://stackoverflow.com/questions/8264525
复制相似问题