我正在使用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?
}
}
答案 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()来刷新列表。