从未调用过BaseAdapter OnItemClickListener

时间:2016-04-23 17:54:48

标签: java android listview baseadapter onitemclicklistener

我为我的smudge/clean设置了自定义BaseAdapter,其中我实现了ListView

问题是永远不会调用AdapterView.OnItemClickListener方法。我想我需要在我的主onItemClick(AdapterView<?>, View, int, long)中而不是interface自定义适配器中实现Activity

MyListViewAdapter.java

ListView

我是对的吗?

2 个答案:

答案 0 :(得分:2)

为什么在适配器内部有OnItemClickListener?!您可以在Adapter内部使用OnClickListener,或者最佳做法是将OnItemClickListener设置为ListView或您在activity / fragment中使用的任何AdapterView。 你现在这样做的方式,由于以下几个原因它不会起作用:

  1. 您不必将侦听器设置为视图。
  2. 无法将OnItemClickListener设置为TextView。
  3. 将onClickListener设置为适配器类内的TextView意味着您必须单击TextView本身,否则,将调用侦听器

答案 1 :(得分:1)

使用自定义适配器OnItemClickListener不起作用。您必须在getView方法中在视图上注册onClickListener。

public View getView(int position, View convertView, ViewGroup parent)
    {
        LayoutInflater layoutInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        /**
         * Inflating the root view and all his children and set them to a View Object.
         *
         */
        View row = layoutInflater.inflate(R.layout.list_view_row,null);

        // Get all the views in my row
        this.a = (TextView) row.findViewById(R.id.a_id;


        MyListViewRow myListViewRow = rowsList.get(position);

        // Set values to all the views in my row
        this.a.setText(myListViewRow.getA());
        row.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // do your stuff
        }
    });


        return row;
    }