【问题标题】:The same old story: OnItemClickListener just not working同样的老故事: OnItemClickListener 只是不起作用
【发布时间】:2014-02-11 14:55:38
【问题描述】:

我的OnItemClickListener 不适用于我的ListView

我是这样设置的:

ChatAdapter ca = new ChatAdapter(this, chatProfileList);
chatListView.setAdapter(ca);
chatListView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        Toast.makeText(ChatAct.this, "Yay its clicked.", Toast.LENGTH_LONG).show();
    }
});

错误:当我单击列表项时没有任何反应,它根本没有触发。

事实:

  • 我的适配器包含数据,因为我可以看到列表项。
  • 我的列表项没有按钮、单选按钮、复选框或任何“可点击”视图
  • 我的 ListView 上有 OnItemClickListener,我可以打印它。
  • 我已阅读 stackoveflow 中有关此问题的所有帖子,但都没有帮助。

试过了:

  • 尝试将android:descendantFocusability="blocksDescendants" 添加到我的list_item.xml 的根目录
  • 尝试将android:focusable="false" 添加到我的list_item.xml 中的所有元素
  • 尝试将android:focusableInTouchMode="false" 添加到我的 list_item.xml 中的 TextViews
  • 尝试将android:clickable="false" 添加到我的 list_item.xml 中的 TextViews
  • 我尝试了一些混合变体,例如:focusabileInTouchMode、clikable 和 focusable 都设置为 false

我还不能添加声望奖励,但第一个有效的解决方案将获得 100 声望。

请帮忙,Android 又这么随意。

编辑:

我的适配器没有任何东西(?)可以窃取焦点

public class ChatAdapter extends BaseAdapter {

public List<ChatUnit> adapterData = new ArrayList<ChatUnit>();
LayoutInflater inflater;

Activity act;

public ChatAdapter(Activity act, List<ChatUnit> adapterData) {

    this.act = act;
    inflater = LayoutInflater.from(act);
    this.adapterData = adapterData;

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder viewHolder;

     ChatListView chatListItemView = (ChatListView) convertView;

    if (chatListItemView == null) {

        chatListItemView = new ChatListView(act);
        chatListItemView.initView(this.act);

        viewHolder = new ViewHolder();

        viewHolder.nameTv = (TextView) chatListItemView.findViewById(R.id.chat_name_tv);
        viewHolder.iconIv = (ImageView) chatListItemView.findViewById(R.id.chat_profile_iv);
        viewHolder.gameRequestsTv = (TextView) chatListItemView.findViewById(R.id.chat_naptar_tv);
        viewHolder.newMessagesTv = (TextView) chatListItemView.findViewById(R.id.chat_bubi_tv);
        viewHolder.backgroundViewGroup = (ViewGroup) chatListItemView.findViewById(R.id.chat_list_item_backgroun);
        viewHolder.chatSchedImg = (ImageView) chatListItemView.findViewById(R.id.chat_sched_img);

        chatListItemView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) chatListItemView.getTag();
    }

    final ChatUnit chatUnit = adapterData.get(position);

    try {
        if (chatUnit != null) {

            viewHolder.nameTv.setText(chatUnit.name);
            viewHolder.gameRequestsTv.setText(chatUnit.gameRequest);
            viewHolder.newMessagesTv.setText(chatUnit.newMessage);
            Picasso.with(this.act).load(chatUnit.pictureUrl).into(viewHolder.iconIv);

            // Set!!!!
            chatListItemView.setData(chatUnit);

        }
    } catch (Exception e) {
        e.printStackTrace();

    }

    return chatListItemView;
}

class ViewHolder {

    // ..
    public ViewGroup backgroundViewGroup;
    public TextView nameTv;
    public ImageView iconIv;

    public TextView gameRequestsTv;
    public TextView newMessagesTv;

    public ImageView chatSchedImg;

}

@Override
public int getCount() {

    if (adapterData != null) {
        return adapterData.size();
    } else {
        return 0;
    }

}

@Override
public Object getItem(int arg0) {
    return null;
}

@Override
public long getItemId(int position) {
    return 0;
}

public List<ChatUnit> getAdapterData() {
    return adapterData;
}

}

我的 list_item_view.xml:

不包含任何请求焦点或具有任何可点击事物的视图。

<ImageView
    android:id="@+id/chat_profile_iv"
    android:layout_width="51dp"
    android:layout_height="70dp"
    android:layout_marginRight="7dp"
    android:focusable="false"
    android:src="@drawable/male1" />

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_marginRight="7dp"
    android:layout_weight="1"
    android:focusable="false"
    android:orientation="vertical" >

    <hu.illion.sporttech.views.other.SportTechTextView
        android:id="@+id/chat_name_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:clickable="false"
        android:ellipsize="end"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:gravity="center|left"
        android:text="Ez egy név itt"
        android:textColor="#fff"
        android:textSize="18sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:focusable="false" >

        <ImageView
            android:id="@+id/chat_online_iv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:focusable="false"
            android:src="@drawable/online" />

        <TextView
            android:id="@+id/chat_online_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginLeft="3dp"
            android:clickable="false"
            android:focusable="false"
            android:focusableInTouchMode="false"
            android:text="Online"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="#68ff5d" />
    </LinearLayout>
</LinearLayout>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:focusable="false"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:focusable="false" >

        <TextView
            android:id="@+id/chat_bubi_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:focusable="false"
            android:text="0"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="#8b8b8b"
            android:textSize="12sp" />

        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:focusable="false" >

            <ImageView
                android:id="@+id/ImageView01"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:focusable="false"
                android:src="@drawable/chatke" />
        </FrameLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:focusable="false" >

        <TextView
            android:id="@+id/chat_naptar_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:clickable="false"
            android:focusable="false"
            android:focusableInTouchMode="false"
            android:text="0"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="#8b8b8b"
            android:textSize="12sp" />

        <ImageView
            android:id="@+id/chat_sched_img"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:focusable="false"
            android:src="@drawable/naptarka" />
    </LinearLayout>
</LinearLayout>

编辑 2:

按照你们中的一些人的建议,我一个一个地删除了我的元素,现在我最终得到了一个单一的线性布局。还是行不通。

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/chat_list_item_backgroun"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:background="#123"
    android:orientation="horizontal"
    >

【问题讨论】:

  • 我发现有时我的 Toasts 也不起作用。在onClick 中尝试Log.d(TAG, LOG);
  • list_item.xml 源和 getView()/bindView()/其他“获取视图”适配器的自定义(我认为问题不在于“可点击”视图而是“窃取焦点” - 视图可能是 EditText或在 getView 中设置点击侦听器......)......现在问题无法回答(它适用于我:P)和题外话(这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 )
  • 尝试设置不同的列表项布局。如果可行,请尝试删除元素,直到找到阻塞的元素。
  • 你使用什么样的适配器?能给点代码吗?

标签: android xml listview android-listview


【解决方案1】:

如果列表中的膨胀视图中的元素之一正在接收触摸事件(onClick、onKeyDown 等),它将在到达列表项之前被消耗,因此侦听器不会叫

【讨论】:

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