setOnItemClickListener不适用于ListView中的按钮

时间:2015-07-28 13:02:16

标签: android listview button onclicklistener simplecursoradapter

我正在尝试在每个列表项中放置一个按钮。这就是这个想法:

文本1 ____________ [BTN]

文本2 ____________ [BTN]

等...

项目的XML是:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:descendantFocusability="blocksDescendants">

    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?android:attr/listPreferredItemHeight"
        android:gravity="center_vertical"
        android:id="@+id/list_item_textview"/>

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/deleteButton"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:background="@null"
        android:clickable="true"
        android:focusable="false"
        android:src="@drawable/ic_delete_black_24dp"/>
</RelativeLayout>

有两个活动共享同一个片段。此片段使用SimpleCursorAdapter从数据库中获取数据。这很有效。

创建并设置适配器后,我尝试找到按钮并执行setOnClickListener。这不起作用。

以下是片段中onCreateView方法的代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_item_scroll, container, false);

    ListView listView = (ListView) rootView.findViewById(R.id.listview_item);

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(
            getActivity(),
            R.layout.list_item,
            ((ListItems)getActivity()).getCursor(1,1),
            new String[] {((ListItems) getActivity()).getColumnName()},
            new int[] {R.id.list_item_textview}, 0);

    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(getActivity(), ((ListItems) getActivity()).getGoToClass());
            intent.putExtra("apiary_id",(int) id);
            intent.putExtra("hive_id", -1);
            startActivity(intent);

        }
    });


/* SOMEWHERE BELOW IS THE PROBLEM */

    View list_item_view = inflater.inflate(R.layout.list_item, container, false);

    ImageButton deleteButton = (ImageButton) list_item_view.findViewById(R.id.deleteButton);
    System.out.println("====================>" + deleteButton.toString()); //This prints something which includes the id of the button, so it is finding it.
    deleteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            System.out.println("THIS IS NOT WORKING!!!!");
        }
    });

    return rootView;
}

这是我的第一个Android应用程序,我现在有几天没有任何进展这个问题了。任何提示都非常感谢!

非常感谢!

1 个答案:

答案 0 :(得分:0)

制作一个像这样的自定义列表适配器

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="oval">
<corners android:radius="10dip"/>
<stroke android:color="@color/red" android:width="2dip"/>
<solid android:color="@android:color/transparent"/>
</shape>

}

并在你的片段中

public class CustomListAdapter extends BaseAdapter {
private String[] items;
private LayoutInflater inflater;
Context context;
public CustomListAdapter(Context c, String[] items) {
    this.items = items;
    inflater =LayoutInflater.from(c);
    context = c;
}

@Override
public int getCount() {
    return items.length;
}

@Override
public Object getItem(int location) {
    return items[location];
}

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

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null)
        convertView = inflater.inflate(R.layout.list_item, null);
    TextView txt = (TextView) convertView.findViewById(R.id.list_item_textview);
    ImageButton button = (ImageButton) convertView.findViewById(R.id.deleteButton);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context, "clicked ",
                    Toast.LENGTH_SHORT).show();
        }
    });
    txt.setText(""+items[position]);

    return convertView;
}
希望这会对你有帮助!!!