Android 为多个膨胀的文本视图设置文本仅适用于最后一个
Android setting text for multiple inflated textviews only works on last
我是 Android 的新手,正在尝试制作一个简单的清单应用程序。我正在测试使用文本视图的 xml 模板将文本视图动态添加到 activity。问题是,当我尝试膨胀多个视图时,它会创建文本视图,但只会将文本设置为最后创建的视图。
这是activity中的代码:
LinearLayout linearLayout = (LinearLayout)findViewById(R.id.main_linear_layout);
TextView textView1 = (TextView)getLayoutInflater().inflate(R.layout.textview_template, linearLayout).findViewById(R.id.textview_template);
TextView textView2 = (TextView)getLayoutInflater().inflate(R.layout.textview_template, linearLayout).findViewById(R.id.textview_template);
TextView textView3 = (TextView)getLayoutInflater().inflate(R.layout.textview_template, linearLayout).findViewById(R.id.textview_template);
textView1.setText("Take out trash.");
textView2.setText("Wash windows.");
textView3.setText("Why won't you work?");
这是我尝试将文本视图插入的主要布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/main_linear_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:clipToPadding="false"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<android.support.v7.widget.Toolbar
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="#EEEEEE"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:elevation="2dp"
android:background="#FFFFFF">
<EditText android:id="@+id/new_task_text_edit"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="@string/text_edit_hint"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_add"
android:onClick="addTask"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="4dp">
</LinearLayout>
</LinearLayout>
这是文本视图的模板代码 (textview_template.xml):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:id="@+id/textview_template"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:textColor="#000000"
android:textSize="20dp"
android:background="@drawable/item_box" />
</LinearLayout>
显示的是:
我试过在每次膨胀之后但在下一次膨胀之前设置文本,但结果是一样的。我做错了什么?
实际上,您所有的 textView1
、textView2
、textView3
都指向相同的 UI,因为您正在使用相同的 ID 膨胀并且您正在立即搜索。
ID 必须不同,对于您编码更好的东西,请使用 recyclerview
和适配器,因为上面的编码会更好。
textview_template.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textview_template"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:textColor="#000000"
android:textSize="20dp"
android:background="@drawable/item_box"
/>
我不知道你的main_linear_layout
ID在哪里,但是activity代码应该是这样的。
LinearLayout linearLayout = (LinearLayout)findViewById(R.id.main_linear_layout);
TextView textView1 = (TextView) getLayoutInflater().inflate(R.layout.textview_template, null);
TextView textView2 = (TextView) getLayoutInflater().inflate(R.layout.textview_template, null);
TextView textView3 = (TextView) getLayoutInflater().inflate(R.layout.textview_template, null);
textView1.setText("Take out trash.");
textView2.setText("Wash windows.");
textView3.setText("Why won't you work?");
linearLayout.addView(textView1);
linearLayout.addView(textView2);
linearLayout.addView(textView3);
我是 Android 的新手,正在尝试制作一个简单的清单应用程序。我正在测试使用文本视图的 xml 模板将文本视图动态添加到 activity。问题是,当我尝试膨胀多个视图时,它会创建文本视图,但只会将文本设置为最后创建的视图。
这是activity中的代码:
LinearLayout linearLayout = (LinearLayout)findViewById(R.id.main_linear_layout);
TextView textView1 = (TextView)getLayoutInflater().inflate(R.layout.textview_template, linearLayout).findViewById(R.id.textview_template);
TextView textView2 = (TextView)getLayoutInflater().inflate(R.layout.textview_template, linearLayout).findViewById(R.id.textview_template);
TextView textView3 = (TextView)getLayoutInflater().inflate(R.layout.textview_template, linearLayout).findViewById(R.id.textview_template);
textView1.setText("Take out trash.");
textView2.setText("Wash windows.");
textView3.setText("Why won't you work?");
这是我尝试将文本视图插入的主要布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/main_linear_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:clipToPadding="false"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<android.support.v7.widget.Toolbar
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="#EEEEEE"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:elevation="2dp"
android:background="#FFFFFF">
<EditText android:id="@+id/new_task_text_edit"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="@string/text_edit_hint"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_add"
android:onClick="addTask"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="4dp">
</LinearLayout>
</LinearLayout>
这是文本视图的模板代码 (textview_template.xml):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:id="@+id/textview_template"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:textColor="#000000"
android:textSize="20dp"
android:background="@drawable/item_box" />
</LinearLayout>
显示的是:
我试过在每次膨胀之后但在下一次膨胀之前设置文本,但结果是一样的。我做错了什么?
实际上,您所有的 textView1
、textView2
、textView3
都指向相同的 UI,因为您正在使用相同的 ID 膨胀并且您正在立即搜索。
ID 必须不同,对于您编码更好的东西,请使用 recyclerview
和适配器,因为上面的编码会更好。
textview_template.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textview_template"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:textColor="#000000"
android:textSize="20dp"
android:background="@drawable/item_box"
/>
我不知道你的main_linear_layout
ID在哪里,但是activity代码应该是这样的。
LinearLayout linearLayout = (LinearLayout)findViewById(R.id.main_linear_layout);
TextView textView1 = (TextView) getLayoutInflater().inflate(R.layout.textview_template, null);
TextView textView2 = (TextView) getLayoutInflater().inflate(R.layout.textview_template, null);
TextView textView3 = (TextView) getLayoutInflater().inflate(R.layout.textview_template, null);
textView1.setText("Take out trash.");
textView2.setText("Wash windows.");
textView3.setText("Why won't you work?");
linearLayout.addView(textView1);
linearLayout.addView(textView2);
linearLayout.addView(textView3);