我的活动中有一个微调器窗口小部件,用户可以选择列表名称。
通常,微调器的功能是在列表之间切换,但对于几个实例,我换出选择更改侦听器以使用相同的选项列表执行不同的功能。一旦做出选择,旧的听众就会恢复并继续生活。
这是一个糟糕的错误安排。相反,我希望有一个函数只需要一个选择监听器和一些其他参数,并显示一个弹出列表,该列表由与微调器相同的光标(或相同的光标)填充,而不使用微调器本身。
我有什么方法可以做到这一点吗?
答案 0 :(得分:10)
这是使用AlertDialog和AlertDialog.Builder的spinner等弹出细节的最佳示例
AlertDialog dialog;
final CharSequence[] items = { "Item1", "Item2" };
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(title);
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int pos) {
switch (pos) {
case 0:
{
Toast.makeText(this,"Clicked on:"+items[pos],Toast.LENGTH_SHORT).show();
}break;
case 1:
{
Toast.makeText(this,"Clicked on:"+items[pos],Toast.LENGTH_SHORT).show();
}break;
}
}});
dialog=builder.create();
dialog.show();
答案 1 :(得分:9)
使用AlertDialog.Builder
并通过生成行的Adapter
提供setAdapter()
。
在您的情况下,我不会使用相同的Cursor
,因为Cursor
具有当前行的固有概念,因此当Cursor
使用它时会弄乱SpinnerAdapter
您的Spinner
可以搞砸Cursor
。使用相同的{{1}}。
答案 2 :(得分:3)
如果您不受API级别11的限制,则listPopupWindow接近您想要的。
答案 3 :(得分:1)
CharSequence[] items = {"Mangoes", "Bananas", "Grapes"};
new AlertDialog.Builder(getActivity())
.setTitle("Action")
.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if(item==0){
// Mangoes selected
}
else if(item==1){
// Bananas selected
}
else if(item==2){
// Grapes selected
}
}
})
.show();
答案 4 :(得分:1)