繁体   English   中英

如何为单个项目取消设置ListView按钮的onClickListener-Android

[英]How to unset ListView button's onClickListener for a single item - Android

我已使用TableLayout生成以下购物车活动输出。 输出

所以listview有3个listviews(项目,价格,数量)和一个按钮(用于删除),我想给购物车一个标题。 因此,我将列表视图的第一个项目初始化为标题(“项目名称”,“价格”,“数量”,“删除”)

现在的问题是,每当用户单击“删除”按钮(如图中圆圈所示)时,标题也会被删除。 (由于onClickListener默认情况下已应用于适配器类中的所有按钮)

我应该如何删除第一个Button上的onClickListener并保持其余按钮的原样?

另外:如果你们可以建议一些很棒的方式格式化购物车,以免显得天真,那就太好了。 :)排灯节快乐,在此先感谢。 -Android newBee

cartlayout.xml文件

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="*"
android:background="#ffffff">
<TableRow>
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/cartlist_layout"
android:orientation="horizontal">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/t1"
    android:textStyle="normal|bold"
    android:padding="5dip"
    android:layout_alignParentLeft="true"
    android:layout_toLeftOf="@+id/t2"
    />
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/t2"
    android:padding="5dip"
    android:textStyle="normal|bold"
    android:layout_centerHorizontal="true"
    />

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_toRightOf="@+id/t2"
    android:id="@+id/t3"
    android:textStyle="normal|bold" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:id="@+id/button6" />
</TableRow>>
</TableLayout>

Java代码:

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment_mycart,container,false);
    this.getActivity().setTitle("AADESH");

    cartlistview=(ListView)view.findViewById(R.id.listView1);

    db=new DatabaseHelper(this.getContext());
    db.onCreate();
    Cursor res=db.onView();
    int len=res.getCount();

    listCartItems = new ArrayList<CartItems>();
    listCartItems.add(new CartItems("Item Name", "Quantity", "Price","Delete"));

    if(len==0)
    {
        Toast.makeText(this.getContext(),"Cart is Empty.",Toast.LENGTH_SHORT).show();
        statusOfCart=false;
    }
    else {
        while (res.moveToNext()) {
            String itemname = res.getString(1).toString();  // 0 is id, 1 is name, 2 is qty, 3 price
            String itemqty = Integer.toString(res.getInt(2));
            String itemprice = Integer.toString(res.getInt(3)) ;
            Toast.makeText(this.getContext(),itemname,Toast.LENGTH_SHORT).show();
            listCartItems.add(new CartItems(itemname, itemqty, itemprice,"X"));
        }
    }
    CartListAdapter cartListAdapter = new CartListAdapter(getContext(), R.layout.cartlist_layout, listCartItems);
    cartlistview.setAdapter(cartListAdapter);

    return view;
}

}

这里的CartAdapter Java代码:

public class CartListAdapter extends ArrayAdapter<CartItems> {
Context context;
int resLayout;
List<CartItems> listCartItems;
int pos;
public CartListAdapter(Context context,int resLayout,List <CartItems> listCartItems) {
    super(context, resLayout, listCartItems);
    this.context=context;
    this.resLayout=resLayout;
    this.listCartItems=listCartItems;
}

@NonNull
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View v=View.inflate(context,resLayout,null);
    pos=position;
    TextView name=(TextView)v.findViewById(R.id.t1);
    TextView qty=(TextView)v.findViewById(R.id.t2);
    TextView price=(TextView)v.findViewById(R.id.t3);
    Button delete=(Button)v.findViewById(R.id.button6);

    CartItems cartItems=listCartItems.get(position);
    name.setText(cartItems.getItemname());
    qty.setText(String.valueOf(cartItems.getQty()));
    price.setText(String.valueOf(cartItems.getPrice()));
    delete.setText(String.valueOf(cartItems.getDel()));

    delete.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    listCartItems.remove(position);
                    notifyDataSetChanged();

                }
            }
    );

    return v;
 }
}

执行listCartItems.remove(position); 仅当位置> 0时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM