在一个循环中动态微调添加 [英] Add Spinner dynamically in a loop
问题描述
我加入说'N'纺纱在一个循环。但是,只有最后添加的微调是可见的,当我跑我的code。请参考下面
我的code 上下文的背景下=这;
ArrayList的< ArrayList的<串GT;>名单=新的ArrayList< ArrayList的<串GT;>(); ArrayList的<串GT; HI =新的ArrayList<串GT;();
hi.add(测试1);
hi.add(试验2); list.add(HI); ArrayList的<串GT; HI1 =新的ArrayList<串GT;();
hi1.add(测试3);
hi1.add(测试4); list.add(HI1); AlertDialog.Builder警报=新AlertDialog.Builder(背景); alert.setTitle(测试应用程序);
alert.setMessage(测试);
对(INT I = 0; I&2;我++){
最后的微调微调=(微调)布局
.findViewById(R.id.spinner1);
ArrayAdapter<串GT; DataAdapter的=新ArrayAdapter<串GT;(这一点,
android.R.layout.simple_spinner_item,list.get(I)); DataAdapter的
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(DataAdapter的);
alert.setView(微调);
} alert.show();
这是发生,因为你在你的为
循环做的是寻找一个微调
在活动
布局,然后使用的的setView
方法 AlertDialog
添加它(这种方法并不意见添加到其他查看
已经present,它只替换他们)。如果你想多添加微调
相同的 AlertDialog
你应该这样做是这样的:
的LinearLayout LL =新的LinearLayout(本);
ll.setOrientation(LinearLayout.VERTICAL);
对(INT I = 0; I&2;我++){
微调微调=新的微调(本);
ArrayAdapter<串GT; DataAdapter的=新ArrayAdapter<串GT;(这一点,
android.R.layout.simple_spinner_item,list.get(I));
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(DataAdapter的);
LinearLayout.LayoutParams PARAMS =新LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
ll.addView(微调,则params);
}
alert.setView(Ⅱ);
编辑:
您可以通过使用适当的布局管理器添加更多的意见。例如,对于一个的TextView
和微调
您可以使用同一行 TableLayout
:
TableLayout TL =新TableLayout(本);
对(INT I = 0; I&2;我++){
TR的TableRow =新的TableRow(本);
TextView的T =新的TextView(本);
t.setText(文本+ I);
TableRow.LayoutParams params1 =新TableRow.LayoutParams(
TableRow.LayoutParams.WRAP_CONTENT,
TableRow.LayoutParams.WRAP_CONTENT);
tr.addView(T,params1);
微调微调=新的微调(本);
ArrayAdapter<串GT; DataAdapter的=新ArrayAdapter<串GT;(这一点,
android.R.layout.simple_spinner_item,list.get(I));
DataAdapter的
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(DataAdapter的);
TableRow.LayoutParams params2 =新TableRow.LayoutParams(
TableRow.LayoutParams.FILL_PARENT,
TableRow.LayoutParams.WRAP_CONTENT);
tr.addView(微调,params2);
TableLayout.LayoutParams trParams =新TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT);
tl.addView(TR,trParams);
}
alert.setView(TL);
I am adding say 'n' spinners in a loop. But only last added spinner is visible when I ran my code. Please see my code below
Context context = this;
ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
ArrayList<String> hi = new ArrayList<String>();
hi.add("Test 1");
hi.add("Test 2");
list.add(hi);
ArrayList<String> hi1 = new ArrayList<String>();
hi1.add("Test 3");
hi1.add("Test 4");
list.add(hi1);
AlertDialog.Builder alert = new AlertDialog.Builder(context);
alert.setTitle("Test App");
alert.setMessage("Testing");
for (int i = 0; i < 2; i++) {
final Spinner spinner = (Spinner) layout
.findViewById(R.id.spinner1);
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, list.get(i));
dataAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(dataAdapter);
alert.setView(spinner);
}
alert.show();
That is happening because all you do in your for
loop is searching for a Spinner
in the Activity
' layout and then using the setView
method of the AlertDialog
to add it(this method doesn't add the views to the other Views
already present, it just replaces them). If you want to add multiple Spinner
to the same AlertDialog
you should do it like this:
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
for (int i = 0; i < 2; i++) {
Spinner spinner = new Spinner(this);
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, list.get(i));
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(dataAdapter);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
ll.addView(spinner, params);
}
alert.setView(ll);
Edit :
You can add more views by using a proper layout manager. For example, for a TextView
and a Spinner
on the same row you could use a TableLayout
:
TableLayout tl = new TableLayout(this);
for (int i = 0; i < 2; i++) {
TableRow tr = new TableRow(this);
TextView t = new TextView(this);
t.setText("Text " + i);
TableRow.LayoutParams params1 = new TableRow.LayoutParams(
TableRow.LayoutParams.WRAP_CONTENT,
TableRow.LayoutParams.WRAP_CONTENT);
tr.addView(t, params1);
Spinner spinner = new Spinner(this);
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, list.get(i));
dataAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(dataAdapter);
TableRow.LayoutParams params2 = new TableRow.LayoutParams(
TableRow.LayoutParams.FILL_PARENT,
TableRow.LayoutParams.WRAP_CONTENT);
tr.addView(spinner, params2);
TableLayout.LayoutParams trParams = new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT);
tl.addView(tr, trParams);
}
alert.setView(tl);
这篇关于在一个循环中动态微调添加的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!