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

Android 具有自定义布局的微调器的动态填充,android,spinner,Android,Spinner,我的listview有一个自定义布局项。布局项中有一个微调器,需要填充值,通常由android:entries填充 这个方法的问题是最终用户不能修改值,这是我想要包括的。由于布局项和随后的微调器在同一个listview上重复多次,我想一定有办法以编程方式填充它一次。我就是搞不懂 XML: 是的,我想避免使用android:entries=@array/workout\u items,因为这意味着在XML资源文件中手动键入微调器的每个项目,并且我无法在程序运行时动态添加项目。下面是一个简单的示例,

我的listview有一个自定义布局项。布局项中有一个微调器,需要填充值,通常由android:entries填充 这个方法的问题是最终用户不能修改值,这是我想要包括的。由于布局项和随后的微调器在同一个listview上重复多次,我想一定有办法以编程方式填充它一次。我就是搞不懂

XML:


是的,我想避免使用android:entries=@array/workout\u items,因为这意味着在XML资源文件中手动键入微调器的每个项目,并且我无法在程序运行时动态添加项目。

下面是一个简单的示例,说明如何执行此操作,显然,泛型可以更改,还有其他加载微调器的方法

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


有关更多信息,请参阅和类

他说微调器位于行布局中,而您当前的代码对此不起作用。此外,如果我没有弄错的话,API级别11中的add和addAllavailable已经调用notifyDataSetChanged,因此最后一个调用是无用的。我没有意识到add和addAll将notifyDataSetChanged,API中似乎没有记录这一点。我相信我的例子仍然适用,除了通过该方法找到微调器。相反,我认为您应该执行类似的操作:LinearLayout row=ListView findViewByIdR.id.listview1.getItemAtPositionposition;Spinnerrow.findViewByIdR.id.spinner1;也就是说,我现在没有时间测试它,所以这只是猜测。谢谢你,这和我之前的思路相似,我只是无法让它工作。此方法的关键重要性在于视图实际上已初始化。尝试在onCreate、onStart或onResume中查找微调器不起作用,因为视图尚不可见。。。我发现的问题是,对于ListView中的每个微调器,我仍然必须这样做,我希望得到更通用的东西,比如在onCreate中创建的资源,可以被XML引用,或者类似的东西,我认为这实际上是不可能的……我已经看过了。
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();
}