从listview获取Arraylist的索引

时间:2016-02-28 11:06:32

标签: android listview arraylist simpleadapter

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

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

listview 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?
}
}

1 个答案:

答案 0 :(得分:0)

不是通过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()来刷新列表。