我用WindowManager创建了一个窗口,在里面放了一个自定义的ListView,但是这个ListView不能响应OnItemClick和OnItemLongClick事件,请问是怎么回事?已经快被这个问题逼疯了。
另外,如果我在WindowManager中只放一个TextView的话,这个TextView是能响应点击事件的。
我的代码如下:private WindowManager.LayoutParams wmParams;
private WindowManager wm;
private ListView informationBar;public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 初始化信息条
initInfoBar();
initWindowManager();
wm.addView(informationBar, wmParams); // 创建View
}//onCreateprivate void initWindowManager() {
wm = (WindowManager) getApplicationContext().getSystemService("window");
wmParams = new WindowManager.LayoutParams();
wmParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;// 即2003
wmParams.format = 1;
wmParams.width = ViewGroup.LayoutParams.FILL_PARENT;
wmParams.height = 50;
// 在屏幕中的位置
wmParams.gravity = Gravity.BOTTOM;
wmParams.y = 0;// offset to bottom
}
private void initInfoBar() {
informationBar = new ListView(this);
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
String[] viewNames = { "infobar_text_content",
"infobar_text_logo" };
map.put(viewNames[0], "为什么不能点击");
map.put(viewNames[1], R.drawable.logo);
list.add(map);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put(viewNames[0], "为什么不能点击2");
map2.put(viewNames[1], R.drawable.logo);
list.add(map2);
SimpleAdapter sadapter = new SimpleAdapter(this, list,
R.layout.infobar_text, viewNames, new int[] {
R.id.infobar_text_content,
R.id.infobar_text_logo });
informationBar.setAdapter(sadapter); informationBar.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.i("MAINACTIVITY", "item click");
Toast.makeText(MainActivity.this, "item click",
Toast.LENGTH_LONG).show();
}
});
});
}
另外,如果我在WindowManager中只放一个TextView的话,这个TextView是能响应点击事件的。
我的代码如下:private WindowManager.LayoutParams wmParams;
private WindowManager wm;
private ListView informationBar;public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 初始化信息条
initInfoBar();
initWindowManager();
wm.addView(informationBar, wmParams); // 创建View
}//onCreateprivate void initWindowManager() {
wm = (WindowManager) getApplicationContext().getSystemService("window");
wmParams = new WindowManager.LayoutParams();
wmParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;// 即2003
wmParams.format = 1;
wmParams.width = ViewGroup.LayoutParams.FILL_PARENT;
wmParams.height = 50;
// 在屏幕中的位置
wmParams.gravity = Gravity.BOTTOM;
wmParams.y = 0;// offset to bottom
}
private void initInfoBar() {
informationBar = new ListView(this);
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
String[] viewNames = { "infobar_text_content",
"infobar_text_logo" };
map.put(viewNames[0], "为什么不能点击");
map.put(viewNames[1], R.drawable.logo);
list.add(map);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put(viewNames[0], "为什么不能点击2");
map2.put(viewNames[1], R.drawable.logo);
list.add(map2);
SimpleAdapter sadapter = new SimpleAdapter(this, list,
R.layout.infobar_text, viewNames, new int[] {
R.id.infobar_text_content,
R.id.infobar_text_logo });
informationBar.setAdapter(sadapter); informationBar.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.i("MAINACTIVITY", "item click");
Toast.makeText(MainActivity.this, "item click",
Toast.LENGTH_LONG).show();
}
});
});
}
private WindowManager.LayoutParams wmParams;
wmParams的flags属性有很多值,就是这个flags在作祟
在有touch事件的时候要将flags设置为FLAG_ALT_FOCUSABLE_IM,touch事件ACTION_UP之后,又要将其设置为FLAG_NOT_FOCUSABLE;
ListView在页面中也还还是存在、还会有这样问题吗?