【发布时间】:2011-06-22 20:08:09
【问题描述】:
这让我发疯了,因为这是我以前做过的事情,但不知道为什么它现在不起作用......
我有一个菜单按钮,通过menu.xml 文件和带有开关的onOptionsItemSelected 方法以通常的方式实现,它创建并显示一个微调器。
我添加了setOnItemSelectedListener,但它似乎永远不会触发。微调器出现,我选择一个选项或退出,onItemSelected 或 onNothingSelected 都没有被调用。
这里是菜单按钮处理开关语句的“case”和“return true”之间的所有代码。 (topThis 是一个引用活动上下文的变量 - 适用于应用程序中的所有其他 toast)
String[] widgetModes = {"Mode 1", "Mode2"};
ArrayAdapter<String> widgetModeAdapter = new ArrayAdapter<String> (this, android.R.layout.simple_spinner_item, widgetModes);
widgetModeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner widgetModeSpinner = new Spinner(this);
widgetModeSpinner.setAdapter(widgetModeAdapter);
widgetModeSpinner.setPrompt("Choose Widget Mode");
widgetModeSpinner.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id)
{
Toast.makeText(topThis, "derp", Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parentView)
{
Toast.makeText(topThis, "herf", Toast.LENGTH_LONG).show();
}
});
widgetModeSpinner.performClick();
有什么想法吗?我隐约怀疑我以编程方式创建Spinner 的事实是问题所在......
【问题讨论】:
-
也许试试 parentView.getContext() ?您不需要将它添加到 UI 的某个位置吗? - 这可能意味着 UI 交互事件(如项目选择)不会传递给 Spinner。
-
感谢您的提示 - 最终按照这些思路实现了一些东西。在布局中添加了一个不可见的微调器,将除 performClick 之外的所有内容移出菜单方法并移入 onCreate 中调用的方法。似乎确保侦听器“附加”到当前膨胀的布局或类似的布局。代码相对于 setContentView(R.layout.main); 的位置很重要……
-
我认为我的其余代码涉及偶尔重新膨胀布局(使用 setContentView(R.layout.main);) 的事实也会导致问题......如果之后没有再次设置,则不再附加监听器布局重新膨胀。
-
您应该尝试使用简单的日志。 i("标签", "消息" ) ;而不是 Toast 来确认它不是你的 Context topThis 导致它吗?
-
您正在定义一个 onItemSelectedListener 但正在调用一个合成 performClick().... 也许您应该重写 onItemClicked() 代替?
标签: android android-layout triggers spinner listener