Android ListView 项目不可点击

Posted

技术标签:

【中文标题】Android ListView 项目不可点击【英文标题】:Android ListView Item is not Clickable 【发布时间】:2012-06-06 08:34:34 【问题描述】:

我想设计 ListView 中的每个列表项都可以点击,并触发点击哪个列表项。但它不能。我在我的代码上尝试了两种方法:setOnItemClickListener() 和 setOnItemSelectedListener()。我已经在谷歌上搜索了一些关于这篇文章的参考资料,但它仍然无法正常工作(可点击)。 我想发布下面的代码:代码可以显示列表项,我可以看到 Log.d(" mListView01.getCount()=",""+vc); 行的 Log.d 内容 在 LogCat 上很好。但是,如果我单击列表项,则没有任何响应。 如果你不介意,你能帮我指出我错在哪里,谢谢!

使用 Activity Widget 创建 listView 的代码:

......
setContentView(R.layout.main_open);
    TextView itemText = (TextView) findViewById(R.id.itemText);
    TextView codeText = (TextView) findViewById(R.id.codeText);
    itemText.setText(selectedItem);
    codeText.setText(selectedCode);
    ListView mListView01 = (ListView)findViewById(R.id.main_open_listview1);
    String[] keys = new String[] "title","title_image", "content",
            "title1","title1_image","content1","title2","title2_image","content2";
    int[] resValues =  new int[]  R.id.title, R.id.title_image, R.id.content,
            R.id.title1, R.id.title1_image, R.id.content1,R.id.title2, R.id.title2_image, R.id.content2;
    openDocAdapter opendoc = new openDocAdapter(this,localdcoumentlist, R.layout.main_open_content, keys, resValues );
    mListView01.setSelected(true);
    mListView01.setClickable(true);
    mListView01.setAdapter(opendoc);       

    int vc = mListView01.getCount();
    Log.d(" mListView01.getCount()="," "+vc);

    mListView01.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) 
                // TODO Auto-generated method stub
                Log.d("Selected From setOnItemSelectedListener, arg2=", " "+ arg2);
            

            @Override
            public void onNothingSelected(AdapterView<?> arg0) 
                // TODO Auto-generated method stub

            
        );


    mListView01.setOnItemClickListener(new AdapterView.OnItemClickListener()
    
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) 
                // TODO Auto-generated method stub
                selectedViewPos = arg2;
                Log.d("TitlesSelectionDialog(),selectedViewPos= "," "+ selectedViewPos);
                Toast.makeText(getApplicationContext(), "selectedViewPos= "+ selectedViewPos, Toast.LENGTH_LONG).show();

            
        );
......

openDocAdapter 的代码:

   private class openDocAdapter extends SimpleAdapter
    
      private Context _con;
      private List _List;
      private int _listviewId;
      private String[] _keys;
      private int[] _resValues;


      public openDocAdapter(Context context, ArrayList<HashMap<String,Object>> List , int listviewId, String[] keys, int[] resValues ) 
      
        super(context, List, listviewId, keys, resValues);
        _con =context;
        _List = List;
        _listviewId = listviewId;
        _keys = keys;
        _resValues = resValues;
      

      @Override
      public View getView(int position, View convertView, ViewGroup parent)
      
          View v = convertView;
          if (v == null) 
              LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
              v = vi.inflate(R.layout.main_open_content, null);
          

          TextView title = (TextView) v.findViewById(R.id.title);
          (...Similiar codes define  textView, imageViewsd.)                            

          return v;
      


      @Override
      public int getCount()
      
        // TODO Auto-generated method stub
        return super.getCount();
      
      @Override
      public Object getItem(int position)
      
        // TODO Auto-generated method stub
        return super.getItem(position);
      
      @Override
      public long getItemId(int position)
      
        // TODO Auto-generated method stub
        return super.getItemId(position);
      
      

Edit1:我发现一个article here关于布局上的Focus设置会导致可点击工作或不工作。因此,我删除了布局的 xml 文件中的 行(我不在这里编码)。然后 setOnItemSelectedListener() 方法在滚动列表列表时使用橙色焦点更改。但还是没有达到我的预期。

【问题讨论】:

【参考方案1】:

问题已解决! 在谷歌搜索/搜索和 try_eror 之后。如果你感兴趣,我愿意分享。

问题的主要原因是:我使用 ScrollView 作为 row.xml 的基本布局(包含每个 listview 行的内容)。然后,我使用 LinearLayout(Vertial) 代替它。 setOnItemClickedListener() 方法现在可以正常工作。我对此一无所知,这会导致 ListView 不可点击。如果有人知道,请告诉我们,

【讨论】:

以上是关于Android ListView 项目不可点击的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 android studio 中的 listview 项目点击更改活动图像和文本? java 或 kotlin

如何设置 ListView 不可点击

Android 设置ListView不可点击(避免闪退)

如何让ListView的item不可点击

Android项目实战(十五):自定义不可滑动的ListView和GridView

android中ListView中的EditText不可编辑!!!