从列表视图中获取 Arraylist 的索引

Get index of Arraylist from listview

我正在使用 Arraylist 来存储用户购物车。Arraylist 保存添加到购物车的项目的详细信息。在ViewCart中有删除ImageButton。我希望当用户单击删除按钮时,该项目及其所有详细信息都应从 ArrayList 中删除。

如何获取被点击的 Arraylist 项的索引,以便将其删除。 Cart view is screenshot is here 我希望当用户单击删除图标时,整行必须从 Arraylist 中删除。在图像中,ArrayList 的大小为 2。

列表视图cartitems.xml

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

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

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/cyan"
            android:weightSum="100" >

            <TextView
                android:id="@+id/tvcartid"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:visibility="gone" />

            <TextView
                android:id="@+id/tvcartname"
                android:layout_width="0dp"
                android:layout_height="70dp"
                android:layout_marginBottom="1dp"
                android:layout_marginLeft="1dp"
                android:layout_marginTop="1dp"
                android:layout_weight="30"
                android:background="@color/white"
                android:gravity="center"
                android:padding="0dp" />

            <TextView
                android:id="@+id/tvcartcategory"
                android:layout_width="0dp"
                android:layout_height="70dp"
                android:layout_marginBottom="1dp"
                android:layout_marginLeft="1dp"
                android:layout_marginTop="1dp"
                android:layout_weight="20"
                android:background="@color/white"
                android:gravity="center"
                android:text="TextView"
                android:visibility="gone" />

            <TextView
                android:id="@+id/tvcartprice"
                android:layout_width="0dp"
                android:layout_height="70dp"
                android:layout_marginBottom="1dp"
                android:layout_marginLeft="1dp"
                android:layout_marginTop="1dp"
                android:layout_weight="20"
                android:background="@color/white"
                android:gravity="center"
                android:text="TextView" />

            <ImageView
                android:id="@+id/tvcartimage"
                android:layout_width="0dp"
                android:layout_height="70dp"
                android:layout_marginBottom="1dp"
                android:layout_marginLeft="1dp"
                android:layout_marginTop="1dp"
                android:layout_weight="30"
                android:background="@color/white"
                android:gravity="center" />

            <ImageButton
                android:id="@+id/bdelete"
                android:layout_width="0dp"
                android:layout_height="70dp"
                android:layout_marginBottom="1dp"
                android:layout_marginLeft="1dp"
                android:layout_marginTop="1dp"
                android:layout_weight="20"
                android:background="@color/white"
                android:gravity="center"
                android:onClick="DeleteItem"
                android:paddingBottom="10dp"
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:paddingTop="10dp"
                android:scaleType="fitCenter"
                android:src="@drawable/delete" />
        </TableRow>
    </LinearLayout>
</ScrollView>

ViewCart.java

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.viewcart);
    ArrayList<HashMap<String, String>> items;
    AddtoCart obj = (AddtoCart) getApplicationContext();
    items = obj.getCart();
    Log.i("SIZE", String.valueOf(obj.getSize()));

    ListAdapter adapter = new SimpleAdapter(ViewCart.this, items, R.layout.cartitems, 
            new String[] {TAG_PID, TAG_NAME, TAG_CATEGORY, TAG_PRICE,TAG_IMAGE},
            new int[] { R.id.tvcartid, R.id.tvcartname, R.id.tvcartcategory
                    , R.id.tvcartprice, R.id.tvcartimage});
    setListAdapter(adapter);


}

public void DeleteItem(View v) {
   //What should i write here?
}
}

您可以像这样在自定义适配器中设置它,而不是通过 xml 设置 onClickListener:

public class CustomSimpleAdapter extends SimpleAdapter {


    private List<? extends Map<String, ?>> mData;

    public CustomSimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
        mData = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v =  super.getView(position, convertView, parent);
        final Object data = mData.get(position);
        v.findViewById(R.id.bdelete).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    mData.remove(data);
                    notifyDataSetChanged();
            }
        });
        return v;
    }
}

这样就可以得到点击视图对应的数据,修改列表反映删除动作,然后调用notifyDataSetChanged()刷新列表。