基本上我的问题很常见。但是我有谷歌和研究所有可能的解决方案,但没有用,因此要求SO解决它。
我的问题是为什么当我为textview找到ViewById时,我在返回时得到一个null。下面是我的活动和XML文件。
的活动:
public class Chicken extends ListActivity {
private TextView dishName;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] chicken = getResources().getStringArray(R.array.chicken_array);
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item,
chicken));
dishName = (TextView) findViewById(R.id.TextView02);
Log.w("test", "ok " + dishName); // returns null
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(getApplicationContext(),
((TextView) view).getText(), Toast.LENGTH_SHORT).show();
}
});
}
}
XML:
<?xml version="1.0" encoding="UTF-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RelativeLayout android:id="@+id/LinearLayout1"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:padding="5dp">
<TabWidget android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" android:id="@android:id/tabs"
android:layout_width="fill_parent" android:layout_height="wrap_content" />
<FrameLayout android:layout_alignParentLeft="true"
android:layout_below="@android:id/tabs" android:id="@android:id/tabcontent"
android:layout_width="185dp" android:layout_height="fill_parent"
android:padding="5dp">
</FrameLayout>
<RelativeLayout android:layout_toRightOf="@android:id/tabcontent"
android:id="@+id/relativeLayout1" android:layout_height="fill_parent"
android:layout_alignTop="@android:id/tabcontent"
android:layout_gravity="right" android:layout_width="115dp"
android:background="@drawable/brown" android:gravity="fill_vertical"
android:layout_alignRight="@android:id/tabs">
<TextView android:textColor="#000000" android:layout_height="wrap_content"
android:text="@string/order" android:paddingTop="3dp"
android:layout_width="wrap_content" android:id="@+id/textView1"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"></TextView>
<Button android:layout_height="wrap_content"
android:layout_width="105dp" android:text="Send" android:id="@+id/button1"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"></Button>
<FrameLayout android:id="@+id/frameLayout1"
android:padding="3dp" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_below="@+id/textView1"
android:layout_alignLeft="@+id/button1" android:layout_above="@+id/button1"
android:layout_alignParentRight="true">
<ScrollView android:id="@+id/ScrollView01"
android:layout_width="wrap_content" android:layout_height="wrap_content">
<TableLayout android:id="@+id/tableLayout01"
android:shrinkColumns="1" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_below="@+id/textView1"
android:layout_alignLeft="@+id/button1">
<TableRow android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/tableRow01">
<TextView android:id="@+id/TextView01"
android:textColor="#000000" android:layout_width="25dp"
android:layout_height="wrap_content" android:text="x1"></TextView>
<TextView android:id="@+id/TextView02" android:text="chicken"
android:textColor="#000000" android:layout_width="wrap_content"
android:layout_height="wrap_content"></TextView>
</TableRow>
<TableRow android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/tableRow02">
</TableRow>
<TableRow android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/tableRow03">
</TableRow>
<TableRow android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/tableRow04">
</TableRow>
<TableRow android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/tableRow05">
</TableRow>
<TableRow android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/tableRow06">
</TableRow>
<TableRow android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/tableRow07">
</TableRow>
<TableRow android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/tableRow08">
</TableRow>
<TableRow android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/tableRow09">
</TableRow>
<TableRow android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/tableRow010">
</TableRow>
</TableLayout>
</ScrollView>
</FrameLayout>
</RelativeLayout>
</RelativeLayout>
</TabHost>
希望有人可以帮我解决这个问题。 提前谢谢。
答案 0 :(得分:2)
您必须使用setContentView告诉活动要膨胀和设置的布局。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout); // Assuming your layout is called mylayout.xml
String[] chicken = getResources().getStringArray(R.array.chicken_array);
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item,
chicken));
dishName = (TextView) findViewById(R.id.TextView02);
Log.w("test", "ok " + dishName); // returns null
ListView lv = getListView();
lv.setTextFilterEnabled(true);
答案 1 :(得分:0)
您可能需要创建textview的gloabl引用,因为它是您为tab活动指定的xml布局中的。但是您尝试从其子活动(用于表示选项卡的活动)访问textview。在子活动中使用findViewById时,它将查看为活动指定的布局或视图。
编辑:使用应用上下文的方式。
扩展应用程序类并添加textview类型的属性。因此,在您的活动中,您可以访问应用程序上下文并将文本视图设置为属性。
MyApplication appContext = (MyApplication) getApplicationContext();
appContext.textview = (TextView) findViewById(R.id.textview1);
在任何其他活动中,您可以以相同的方式访问该文本视图。
MyApplication appContext = (MyApplication) getApplicationContext();
This will have the textview appContext.textview