我的listview有自定义布局项。布局项中有一个微调器,需要填充值,通常是android:entries
我对这种方法的问题是最终用户无法修改值,这是我想要包含的内容。作为布局项和随后的微调器,在同一列表视图上重复多次,我想必须有一种方法以编程方式填充它一次。我只是想不出来。
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/customListItem"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/exerciselbl" />
<Spinner
android:id="@+id/Exercise"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:entries="@array/workout_items" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/textView2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/repslbl" />
<Spinner
android:id="@+id/Reps"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:entries="@array/reps_count" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/weightlbl" />
<EditText
android:id="@+id/Weight"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number" />
</LinearLayout>
</LinearLayout>
所以是的,我想避免使用android:entries="@array/workout_items"
,因为这意味着在XML资源文件中手动输入微调器的每个项目,并且在程序运行时我无法动态添加项目。
答案 0 :(得分:0)
以下是一个如何完成的简单示例,显然泛型可以更改,还有其他方法可以加载微调器。
public void populateSpinner () {
Spinner spinner = (Spinner) findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
List<CharSequence> list = new ArrayList<CharSequence>();
for (int i = 0; i < 10; i++) {
list.add("Item " + i);
}
adapter.addAll(list);
adapter.notifyDataSetChanged();
}
其中一条更重要的行是adapter.notifyDataSetChanged()
,这是因为它告诉视图需要刷新与此微调器关联的数据。
有关详细信息,请参阅ArrayAdapter和Spinner类。