在我的项目列表中添加删除按钮

时间:2013-12-05 14:24:02

标签: java android

我是Java和Android开发的新手。我目前正在创建一个购物应用程序,并且正在考虑在我的购物车列表中添加“删除”按钮。

以下是我购物车列表活动的当前代码,我不确定从哪里开始,我们将非常感谢您的指导。

由于

package .shopper;

import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.support.v4.app.NavUtils;

public class CartListActivity extends ListActivity {

    public class ProductListAdapter extends BaseAdapter {

        private final Context context;

        private List<Product> itemList;

        public List<Product> getItemList() {
            return itemList;
        }

        public void setItemList(List<Product> itemList) {
            this.itemList = itemList;
        }

        public Context getContext() {
            return context;
        }

        public ProductListAdapter(Context c) {
            context = c;
        }

        @Override
        public int getCount() { 
            if(itemList == null) return 0;
            else return itemList.size();
        }       

        @Override
        public Object getItem(int position) { 
            if (itemList == null) return null;
            else return itemList.get(position);
        }

        @Override
        public long getItemId(int position) { 
            if (itemList == null) return 0;
            else return itemList.get(position).hashCode();
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View cell = convertView;

            if (cell == null) {
                // get layout from mobile xml
                LayoutInflater inflater = ((Activity)context).getLayoutInflater();
                cell = inflater.inflate(R.layout.adapter_product_list, parent, false);
            }

            Product p = itemList.get(position);

            //set value into textview according to position
            TextView textView = (TextView) cell.findViewById(R.id.product_title);
            textView.setText(p.getProductName());

            // add £ symbol
            textView = (TextView) cell.findViewById(R.id.product_info);
            textView.setText("Price: " + "£"+ p.getPrice());  

            //set value into imageview according to position
            ImageView imgView = (ImageView) cell.findViewById(R.id.product_image);
            // clear the image
            imgView.setImageDrawable(null);
            //and load from the network
            p.loadImage(imgView, 54, 54);           

            return cell;
        }

    }

    public static final Integer[] productIcons = {
        0, // index 0 is empty
        R.drawable.books,
        R.drawable.films,
        R.drawable.music,
        R.drawable.games,
    };

    private int categoryId;
    private ProductListAdapter adapter;
    private ListViewLoader loader;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // get the category from the intent
        Intent intent = getIntent();
        categoryId = intent.getIntExtra(MainActivity.SELECTED_CATEGORY, 0);

        adapter = new ProductListAdapter(this);
        setListAdapter(adapter);

        // Show the Up button in the action bar.
        setupActionBar();

        loader = new ListViewLoader(adapter, categoryId);
        loader.execute(String.format(MainActivity.WEBSERVER_GETLIST, categoryId));
    }

    /**
     * Set up the {@link android.app.ActionBar}.
     */
    private void setupActionBar() {

        getActionBar().setDisplayHomeAsUpEnabled(true);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.product_list, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.show_cart:
            //create the intent for the cart activity
            Intent intent = new Intent(getApplicationContext(), CartActivity.class);
            startActivity(intent);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        //create an intent
        Intent intent = new Intent(this, ProductActivity.class);
        Product p = (Product)adapter.getItem(position);
        //specify the extra parameters we want to pass
        intent.putExtra(MainActivity.SELECTED_CATEGORY, p.getCategoryId());
        intent.putExtra(MainActivity.SELECTED_PRODUCTID, p.getProductId());
        intent.putExtra(MainActivity.SELECTED_PRODUCTNAME, p.getProductName());
        intent.putExtra(MainActivity.SELECTED_PRODUCTPRICE, p.getPrice());
        intent.putExtra(MainActivity.SELECTED_SUITABLEFORKIDS, p.getSuitableForKids());

        startActivity(intent);
    }

}

编辑: 适用于adapter_product_list的XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="8dp">
    <ImageView
        android:id="@+id/product_image"
        android:layout_width="54dp"
        android:layout_height="54dp"
        android:padding="5dp"
        android:layout_alignParentLeft="true" />
    <TextView
        android:id="@+id/product_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/product_image"
        android:layout_alignTop="@+id/product_image"
        android:textColor="#446688"
        android:textSize="20sp" />
    <TextView
        android:id="@+id/product_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/product_image"
        android:layout_below="@+id/product_title"
        android:textColor="#777777"
        android:textSize="16sp"
        android:textStyle="italic" />


</RelativeLayout>

2 个答案:

答案 0 :(得分:1)

更改您的xml,如下所示

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="8dp" >

    <ImageView
        android:id="@+id/product_image"
        android:layout_width="54dp"
        android:layout_height="54dp"
        android:layout_alignParentLeft="true"
        android:padding="5dp"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/product_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/product_image"
        android:layout_toRightOf="@+id/product_image"
        android:text="adjkajdjk"
        android:textColor="#446688"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/product_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/product_title"
        android:layout_toRightOf="@+id/product_image"
        android:text="adjkajdjk"
        android:textColor="#777777"
        android:textSize="16sp"
        android:textStyle="italic" />

    <Button
        android:id="@+id/delete_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="Delete" />

</RelativeLayout>

在你的适配器里面getView()函数添加这个

Button deleteBtn = (Button) findViewById(R.id.delete_btn);
        deleteBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v)
            {
                itemList.remove(position);  
                notifyDataSetChanged();

            }
        });

答案 1 :(得分:0)

1)希望p.loadImage(imgView,54,54);正在asyncTask中运行 2)如果你想点击ListView行中的一个按钮,你可以将按钮添加到你的行布局中,并在你的getClick方法中实现onClick方法中的那个按钮onClickListenr你将拥有:

if(position<itemList.size()){
       //TO REMOVE TEM FROM ARRAY LIST
      itemList.remove(position);
      //TO Update the ListView
      notifyDataSetChanged();
}

你可以通过在listRow中添加一个复选框并将要删除的项目的位置添加到整数的arrayList中来实现多行删除,并且在点击删除按钮之后你应该删除imteList中的所有项目然后调用notifyDataSetChanged()

修改

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<ImageView
    android:id="@+id/product_image"
    android:layout_width="54dp"
    android:layout_height="54dp"
    android:padding="5dp"
    android:layout_alignParentLeft="true" />
<TextView
    android:id="@+id/product_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/product_image"
    android:layout_alignTop="@+id/product_image"
    android:textColor="#446688"
    android:textSize="20sp" />
<TextView
    android:id="@+id/product_info"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/product_image"
    android:layout_below="@+id/product_title"
    android:textColor="#777777"
    android:textSize="16sp"
    android:textStyle="italic" />
 <Button 
    android:id="@+id/deleteBtn"
    android:layout_width="wrap_content
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/product_info"
 </RelativeLayout>

您应该将此按钮添加到您的布局中,并在适配器的getView方法中添加

Button delete=v.findViewById(R.id.deleteBtn);
delete.setOnClickListener(new View.OnClickListener(){
       @Override
    public void onClick(View v) {
        //THE PART I WROTE ABOVE
    }     
})