具有自定义布局的微调器的动态填充

时间:2012-12-16 13:16:42

标签: android spinner

我的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资源文件中手动输入微调器的每个项目,并且在程序运行时我无法动态添加项目。

1 个答案:

答案 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(),这是因为它告诉视图需要刷新与此微调器关联的数据。

有关详细信息,请参阅ArrayAdapterSpinner类。