Android 自定义ListView setOnItemClickListener

Android 自定义ListView setOnItemClickListener,android,listview,Android,Listview,我有一个列表视图,显示时没有扩展列表活动。我想启用setOnItemClickListener。这是我在onCreate adapter = new CustomAdapter(this, MyDB); setListAdapter(adapter); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemCli

我有一个
列表视图
,显示时没有
扩展列表活动
。我想启用
setOnItemClickListener
。这是我在
onCreate

adapter = new CustomAdapter(this, MyDB);
        setListAdapter(adapter);

        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position,
                                    long id) {

                Toast.makeText(getBaseContext(), "test", Toast.LENGTH_LONG).show();

            }

但是,
setOnItemClickListener
不工作

也许您在xml布局中设置了onClickListener-删除此选项


您可以为每个列表项视图指定
onClickListener
,而无需
ListView。setonimclicklister

如果您在内部使用可单击按钮,我认为最好的方法不是使用
AdapterView.onimclicklistener
,而是使用通常的
onClick
事件。
或者使用android:genderantfocusability=“blocksDescendants”我希望您的案例。

您可以在适配器上设置OnClickListener,如下所示-

public class DeviceList_Adapter extends BaseAdapter implements View.OnClickListener
{
/*************  CustomAdapter Constructor *****************/
public DeviceList_Adapter(Activity a, ArrayList d)
{

    /********** Take passed values **********/
    activity = a;
    data=d;

    /***********  Layout inflator to call external xml layout () ***********/
    inflater = (LayoutInflater)activity.
            getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

public int getCount() {

    if(data.size()<=0)
        return 1;
    return data.size();
}

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

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

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

    View vi = convertView;
    ViewHolder holder;

    if(convertView==null){

        /****** Inflate listitem_device.xml file for each row ( Defined below ) *******/
        vi = inflater.inflate(R.layout.listitem_device, null);

        /******** Set Item Click Listner for LayoutInflater for each row *******/

        vi.setOnClickListener(new OnItemClickListener(position));
    }
    return vi;
}

@Override
public void onClick(View v) {
    Log.v("CustomAdapter", "=====Row button clicked=====");
}

/********* Called when Item click in ListView ************/
private class OnItemClickListener  implements View.OnClickListener {
    private int mPosition;

    OnItemClickListener(int position){
        mPosition = position;
    }

    @Override
    public void onClick(View arg0)
    {
        MainActivity mainActivity = (MainActivity)activity;

        /****  Call  onItemClick Method inside CustomListViewAndroidExample Class ( See Below )****/

        mainActivity.onItemClick(mPosition);
    }
}
}
公共类DeviceList\u适配器扩展BaseAdapter实现View.OnClickListener
{
/*************自定义适配器构造函数*****************/
公用设备列表适配器(活动a、阵列列表d)
{
/**********接受传递的值**********/
活动=a;
数据=d;
/***********布局充气器调用外部xml布局()***********/
充气器=(充气器)活动。
getSystemService(上下文布局\充气机\服务);
}
public int getCount(){

如果(data.size()你有什么错误吗?你的listView是如何创建的?里面有按钮之类的视图吗?没有错误,我就是拿不到吐司。试试`android:DegenantFocusability=“blocksDescendants”`Opiatefuchs,是的,里面有按钮
public class DeviceList_Adapter extends BaseAdapter implements View.OnClickListener
{
/*************  CustomAdapter Constructor *****************/
public DeviceList_Adapter(Activity a, ArrayList d)
{

    /********** Take passed values **********/
    activity = a;
    data=d;

    /***********  Layout inflator to call external xml layout () ***********/
    inflater = (LayoutInflater)activity.
            getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

public int getCount() {

    if(data.size()<=0)
        return 1;
    return data.size();
}

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

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

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

    View vi = convertView;
    ViewHolder holder;

    if(convertView==null){

        /****** Inflate listitem_device.xml file for each row ( Defined below ) *******/
        vi = inflater.inflate(R.layout.listitem_device, null);

        /******** Set Item Click Listner for LayoutInflater for each row *******/

        vi.setOnClickListener(new OnItemClickListener(position));
    }
    return vi;
}

@Override
public void onClick(View v) {
    Log.v("CustomAdapter", "=====Row button clicked=====");
}

/********* Called when Item click in ListView ************/
private class OnItemClickListener  implements View.OnClickListener {
    private int mPosition;

    OnItemClickListener(int position){
        mPosition = position;
    }

    @Override
    public void onClick(View arg0)
    {
        MainActivity mainActivity = (MainActivity)activity;

        /****  Call  onItemClick Method inside CustomListViewAndroidExample Class ( See Below )****/

        mainActivity.onItemClick(mPosition);
    }
}
}