【问题标题】:Not Getting OnItemClick Event of ListView未获取 ListView 的 OnItemClick 事件
【发布时间】:2011-03-15 12:39:57
【问题描述】:

我正在使用一个自定义列表视图。当我点击 listview 时,我没有得到 onClick 事件。

这是我的代码。

        lvlList = (ListView)findViewById(R.id.lvlList);
        lvlList.setOnItemClickListener(new OnItemClickListener() 
        {
            public void onItemClick(AdapterView<?> a, View v,int position, long id) 
            {
                Toast.makeText(getBaseContext(), "Click", Toast.LENGTH_LONG).show();
            }
        });

lvlList.setAdapter(new OrderAdapter(getBaseContext()));

订单适配器

private class OrderAdapter extends BaseAdapter
{
    private LayoutInflater mInflater;

    public OrderAdapter(Context context) 
    {
        mInflater = LayoutInflater.from(context);
    }

    public View getView(int position, View convertView, ViewGroup parent) 
    {
        ViewHolder holder;

        if (convertView == null) 
        {
            convertView = mInflater.inflate(R.layout.example, null);
            holder = new ViewHolder();

            holder.txtTest = (TextView) convertView.findViewById(R.id.txtTest);

            convertView.setTag(holder);
        } 
        else 
        {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.txtTest.setText(Util.SampleTest.get(position));
                    return convertView;
    }

    public class ViewHolder 
    {
        public TextView txtTets;
    }

    public int getCount(){return Util.SampleTest.size();}

    public Object getItem(int position){return position;}

    public long getItemId(int position){return position;}
}

【问题讨论】:

  • 列表中是否有任何项目。您正在设置 onItemClick。你能发布 OrderAdapter 的代码吗?
  • 是的,list 中有 20 多个项目。在这里我添加了我的 OrderAdapter 。
  • 列表显示在列表视图中..?
  • 是的,它显示在列表视图中。
  • getItem 应该返回 Util.SampleTest.get(position) 但我认为这不是问题。

标签: android listviewitem


【解决方案1】:

您需要设置 android:descendantFocusability="blocksDescendants" 在您的自定义 xml 布局文件中用于 LinearLayout 或您一直使用的任何布局。 (用于定义您的自定义行)

这应该可以解决您的问题。因为它确实解决了我的问题。如果解决了,请将我的帖子标记为您的答案。

也可以参考cmetshere

【讨论】:

    【解决方案2】:

    如果您的列表中有可点击项目,您必须使用焦点才能接收列表项目点击事件和列表项目子点击事件。

    在创建列表项时调用以下代码:

    listItem.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);
    

    发现于http://code.google.com/p/android/issues/detail?id=3414,答案#27

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 我已经有了这个代码。但我不喜欢那样做。
      • 那么你显然不会让 onclickitemlistener 工作:) 可聚焦对象似乎绑定 onclick 事件并放置在列表项上。听起来很合理
      【解决方案4】:

      确保您的自定义布局在可能的TextView 之前没有CheckBox。您可以使用ImageView 来实现CheckBox 功能。

      【讨论】:

        【解决方案5】:

        首先,设置适配器,然后在列表视图上设置单击侦听器事件。然后再试一次。

        【讨论】:

        • if not than .. @Override public void onItemClick(AdapterView> arg0, View arg1, int arg2, long arg3) { // TODO 自动生成的方法存根 } 这个函数写出 create方法并在您的活动中实现 OnClickListener
        • 您正在使用 xml 进行列表视图控件...?
        • 检查可点击属性是否被禁用或可编辑属性设置为列表视图的任何控件...
        • 我查过了。我没有声明这样的任何属性。
        【解决方案6】:

        试试这个。

          if (convertView == null) 
            {
                convertView = mInflater.inflate(R.layout.example, null);
                holder = new ViewHolder();
        
                holder.txtTest = (TextView) convertView.findViewById(R.id.txtTest);
                convertView.setClickable(true);
                convertView.setOnClickListener(new OnClickListener() {          
                    @Override
                    public void onClick(View v) {
                 }
               }
        
                convertView.setTag(holder);
        
            } 
            else 
            {
                holder = (ViewHolder) convertView.getTag();
            }
        
            holder.txtTest.setText(Util.SampleTest.get(position));
                        return convertView;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多