我用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();
     }
    });
});
  
}

解决方案 »

  1.   

    谢谢各位,问题已经解决了
    private WindowManager.LayoutParams wmParams;
    wmParams的flags属性有很多值,就是这个flags在作祟
    在有touch事件的时候要将flags设置为FLAG_ALT_FOCUSABLE_IM,touch事件ACTION_UP之后,又要将其设置为FLAG_NOT_FOCUSABLE;
      

  2.   

    如果ListView不在WindowManager中,这里wm.addView("别的控件", wmParams); 添加个别的控件、
    ListView在页面中也还还是存在、还会有这样问题吗? 
      

  3.   

    要在什么时候设置,FLAG_ALT_FOCUSABLE_IM和FLAG_NOT_FOCUSABLE