如何使用行中的删除按钮从ListView中删除行

时间:2016-09-05 18:25:32

标签: android listview

我有一个扩展ArrayAdapter<String>的课程。我想有一个删除图像按钮删除特定的行..这是我的代码:

public class ViewCartList extends ArrayAdapter<String> {

    private String[] cart_item_name;
    private String[] cart_item_quan;
    private String[] cart_item_price;
    private Activity context;


    public ViewCartList(Activity context,  String[] cartitemquan, String[] cartitemname,String[] cartitemprice){
        super(context,R.layout.viewcartlist,cartitemquan);
        this.context = context;
        this.cart_item_quan = cartitemquan;
        this.cart_item_name = cartitemname;
        this.cart_item_price = cartitemprice;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        final View listViewItem = inflater.inflate(R.layout.viewcartlist, null, true);

        TextView textViewItemQuan = (TextView) listViewItem.findViewById(R.id.cart_quan);
        TextView textViewItemName = (TextView) listViewItem.findViewById(R.id.cart_item_name);
        TextView textViewItemPrice = (TextView) listViewItem.findViewById(R.id.cart_item_price);
        ImageButton imcut = (ImageButton) listViewItem.findViewById(R.id.remove_row);

        textViewItemQuan.setText(cart_item_quan[position]);
        textViewItemName.setText(cart_item_name[position]);
        textViewItemPrice.setText(cart_item_price[position]);
        imcut.setVisibility(View.VISIBLE);

        imcut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // I want to delete that particular row
            }
        });

        return listViewItem;
    }
}

这是我的Basket类,我使用上面的适配器类。 如果我想从上面给出的删除按钮中删除ListView中的特定行,该怎么办..

public class Basket extends AppCompatActivity implements View.OnClickListener {

    TextView cartview;
    MyCartDatabse myDatabase;
    SQLiteDatabase sql;
    ContentValues cv;
    String wr;
    ListView list;
    public static String[] quan =null;
    public static  String[] itemname=null;
    public static String[] baseprice=null;
    TextView edit_order;
    public boolean imrow;
    ViewCartList vc;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.basket);


        myDatabase = new MyCartDatabse(this,"mydb",null,1);
        sql = myDatabase.getWritableDatabase();
        cv = new ContentValues();
        list = (ListView)findViewById(R.id.listcart);
        getRecords();

        edit_order = (TextView)findViewById(R.id.edit_order);
        edit_order.setOnClickListener(this);
    }

    public void getRecords(){
         sql = myDatabase.getReadableDatabase();
         Cursor cursor = sql.rawQuery("select * from cart ",null);
         quan = new String[cursor.getCount()];
         itemname = new String[cursor.getCount()];
         baseprice = new String[cursor.getCount()];

        int i = 0;
        if(cursor.getCount()>0){
            while(cursor.moveToNext()){
                String uquan = cursor.getString(5);
                String uname = cursor.getString(1);
                String uprice = cursor.getString(4);

                quan[i] = uquan;
                itemname[i] = uname;
                baseprice[i] = uprice;
                i++;

            }
            vc = new ViewCartList(this,quan,itemname,baseprice);
            list.setAdapter(vc);
        }
        else{
            // Do something
        }

        cursor.close();
    }

    @Override
    public void onClick(View view) {
        edit_order.setText("Apply Changes");
    }
}

4 个答案:

答案 0 :(得分:1)

如果您想完全删除该项目,则应考虑使用List<String>代替Array

这是List

的更新代码
public class ViewCartList extends ArrayAdapter<String> {

    private List<String> cart_item_name;   // Use List here
    private List<String> cart_item_quan;   // Use List here
    private List<String> cart_item_price;   // Use List here
    private Activity context;

    public ViewCartList(Activity context,  List<String> cartitemquan,    List<String> cartitemname,List<String> cartitemprice){
         super(context, R.layout.viewcartlist,cartitemquan);
         this.context = context;
         this.cart_item_quan = cartitemquan;
         this.cart_item_name = cartitemname;
         this.cart_item_price = cartitemprice;
     }

     @Override
     public View getView(final int position, View convertView, ViewGroup parent) {
         LayoutInflater inflater = context.getLayoutInflater();
         final View listViewItem = inflater.inflate(R.layout.viewcartlist, null, true);

         TextView textViewItemQuan = (TextView) listViewItem.findViewById(R.id.cart_quan);
         TextView textViewItemName = (TextView) listViewItem.findViewById(R.id.cart_item_name);
         TextView textViewItemPrice = (TextView) listViewItem.findViewById(R.id.cart_item_price);
         ImageButton imcut = (ImageButton) listViewItem.findViewById(R.id.remove_row);

         textViewItemQuan.setText(cart_item_quan.get(position));
         textViewItemName.setText(cart_item_name.get(position));
         textViewItemPrice.setText(cart_item_price.get(position));
         imcut.setVisibility(View.VISIBLE);

         imcut.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
                 // I want to delete that particular row
                 cart_item_quan.remove(position);
                 cart_item_name.remove(position);
                 cart_item_price.remove(position);

                 notifyDataSetChanged();
             }
        });

        return listViewItem;
    }
}

答案 1 :(得分:1)

解决问题的优雅方法是将ArrayList对象传递给Adapter,然后处理删除操作。

所以你可以考虑创建一个像这样的对象。

public class Cart {
    public String cart_item_name;
    public String cart_item_quan;
    public String cart_item_price;
}

现在取一个ArrayList该类并填充ArrayList以传递给您的Adapter

public class ViewCartList extends BaseAdapter {

    private Context context;
    private ArrayList<Cart> mCartList;

    public ViewCartList(Context context, ArrayList<Cart> mCartList) {
        this.context = context;
        this.mCartList = mCartList;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        final View listViewItem = inflater.inflate(R.layout.viewcartlist, null, true);

        TextView textViewItemQuan = (TextView) listViewItem.findViewById(R.id.cart_quan);
        TextView textViewItemName = (TextView) listViewItem.findViewById(R.id.cart_item_name);
        TextView textViewItemPrice = (TextView) listViewItem.findViewById(R.id.cart_item_price);
        ImageButton imcut = (ImageButton) listViewItem.findViewById(R.id.remove_row);

        textViewItemQuan.setText(mCartList.get(position).cart_item_quan);
        textViewItemName.setText(mCartList.get(position).cart_item_name);
        textViewItemPrice.setText(mCartList.get(position).cart_item_price);

        // Remove the following and set the visibility true from the layout.
        // imcut.setVisibility(View.VISIBLE);

        imcut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Delete the row
                mCartList.remove(position);
                notifyDatasetChanged();
            }
        });

        return listViewItem;
    }
}

答案 2 :(得分:0)

数组是固定长度的,一旦创建就无法调整大小。您可以将元素设置为null以删除对象引用;

imcut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // I want to delete that particular row
                 cart_item_name[position] = null;
                 cart_item_quan[position]= null;
                 cart_item_price[position] = null;
                 notifydatasetchanged();
            }
        });

答案 3 :(得分:0)

public class ViewCartList extends ArrayAdapter<String> {

    private String[] cart_item_name;
    private String[] cart_item_quan;
    private String[] cart_item_price;
    private Activity context;


    public ViewCartList(Activity context,  String[] cartitemquan, String[] cartitemname,String[] cartitemprice){
        super(context,R.layout.viewcartlist,cartitemquan);
        this.context = context;
        this.cart_item_quan = cartitemquan;
        this.cart_item_name = cartitemname;
        this.cart_item_price = cartitemprice;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        final View listViewItem = inflater.inflate(R.layout.viewcartlist, null, true);

        TextView textViewItemQuan = (TextView) listViewItem.findViewById(R.id.cart_quan);
        TextView textViewItemName = (TextView) listViewItem.findViewById(R.id.cart_item_name);
        TextView textViewItemPrice = (TextView) listViewItem.findViewById(R.id.cart_item_price);
        ImageButton imcut = (ImageButton) listViewItem.findViewById(R.id.remove_row);

        textViewItemQuan.setText(cart_item_quan[position]);
        textViewItemName.setText(cart_item_name[position]);
        textViewItemPrice.setText(cart_item_price[position]);
        imcut.setVisibility(View.VISIBLE);
        imcut.setTag(position);
        imcut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // I want to delete that particular row
            int pos = Integer.parseInt(view.getTag().toString());
            mCartList.remove(position);
            notifyDatasetChanged();
            }
        });

        return listViewItem;
    }
}