gpt4 book ai didi

android - 如何访问 TabActivity 中 Activity 中的 View ?

转载 作者:行者123 更新时间:2023-11-29 18:15:39 25 4
gpt4 key购买 nike

我有一个 TabActivity,其中包含旨在拆分表单的其他 Activity 。 TabActivity 在其布局中有一个按钮,用于从包含在 TabActivity 中的所有 Activity 中收集所有表单相关 View 的数据并存储它。我遇到的问题是 TabActivity 似乎无法访问这些 View ;当我用其中之一调用 findViewById() 时,我得到一个 NullPointerException

关于 TabActivity 在控制其包含的 Activity 方面究竟如何工作的文档似乎很少。如果它在从一项 Activity 切换到另一项 Activity 时破坏了一项 Activity ,那么我所处的情况就有意义了。我想知道实现上述目标的最佳方法。

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>

最佳答案

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

setContentView(R.layout.my_tab_activity);

...和...

String fieldValue = ((TextView) findViewById(R.id.text_field)).getText().toString();

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

使用 findViewById(...) 仅在尝试访问已作为当前 Activity 的一部分膨胀的 UI 元素时有效。由于 my_tab_activity.xml 中没有资源 ID 为 R.id.text_fieldTextView,因此它永远不会工作。

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

关于android - 如何访问 TabActivity 中 Activity 中的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8264525/

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