0

我创建自定义 ListViewAdapter

在适配器中我使用 setOnClickListener

public View getView(int position, View convertView, ViewGroup parent)

LayoutInflater inflater = ((Activity)context).getLayoutInflater();

row = inflater.inflate(layoutResourceId, parent, false);

row.setOnClickListener(new View.OnClickListener() {})

在活动中我创建列表视图

listView.setAdapter(new MyAdaper(this));

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {})

但是如果使用 setOnClickListener 则不会引发 setOnItemClickListener

如果评论 setOnClickListener setOnItemClickListener raise

如何使这项工作,以及 setOnClickListener 和 setOnItemClickListener?

4

2 回答 2

1

如果您使用自定义 listAdapter,您可以将 onclickListener 设置为您的基本视图中的子视图(在您的示例中 - 行);在调用堆栈中 listView.setOnItemClickListener 位于 row.setOnclickListener 之上。实际上两者都给出相同的结果,因为(在此上下文中)是默认 ListView 中的一个简单项目。

所以这种情况下的解决方案是:

public View getView(int position, View convertView, ViewGroup parent)
{
    LayoutInflater inflater = ((Activity)context).getLayoutInflater();
    row = inflater.inflate(layoutResourceId, parent, false);        
    ((Button)row.findViewById(R.id.btn1)).setOnClickListener(new View.OnClickListener() {});
}

在上面的示例中,我使用 xml 文件,例如 listView.layoutResourceId 的项目包含一个 Button(R.id.btn1)。之后,您可以将单击侦听器设置为 ListView 和 Button。不同的侦听器会产生不同的\相同的结果(这完全取决于实现)

于 2013-07-21T09:27:25.930 回答
0

我找到了下一个方法(感谢 Raghunandan 关于“你不能两者兼得”)

在适配器中

private android.view.View.OnClickListener onClickListener;
public void setOnClickListener(android.view.View.OnClickListener l) {
    onClickListener = l;
}

private android.view.View.OnLongClickListener onLongClickListener;
public void setOnLongClickListener(android.view.View.OnLongClickListener l) {
    onLongClickListener = l;
}

public View getView(int position, View convertView, ViewGroup parent) {
    row.setOnClickListener(new View.OnClickListener() {
        //My action
        if (onClickListener != null)
            onClickListener.onClick(view);
    })
}
row.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View view) {
        //My action
        if (onLongClickListener != null)
            return onLongClickListener.onLongClick(view);

            return true;
    }
});
于 2013-07-21T11:05:27.513 回答