从列表视图中获取 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()刷新列表。
我正在使用 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()刷新列表。