簡體   English   中英

使用notifyDataSetChanged方法刪除項目后如何刷新listView?

[英]How to I refresh my listView after deleting an item using the notifyDataSetChanged method?

我有一個從現有數據庫中填充的listView ,對於顯示的每個項目,我還有一個刪除按鈕,以便可以將其刪除,當我這樣做時,我希望屏幕刷新並顯示帶有該項目的更新的listView已被刪除。

我知道我應該使用notifyDataSetChanged方法,但是並不能解決問題。 我也嘗試過在線解決此問題,但是沒有任何效果,因此我在下面發布了一些代碼,如果有人可以提供幫助,那將是很好的。

CartItemsAdapter.java

package ankitkaushal.app.healthysizing;

import java.util.ArrayList;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public final class CartItemsAdapter extends ArrayAdapter<Item> implements View.OnClickListener {

    public CartItemsAdapter(Context context, ArrayList<Item> shirtItems) {
        super(context, 0, shirtItems);
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        // Get the data item for this position
        Item item = getItem(position);

        // Check if an existing view is being reused, otherwise inflate the view
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.cart_layout, parent, false);
        }

        // Lookup view for data population
        TextView brand = (TextView) convertView.findViewById(R.id.txt_cart_brand);
        TextView price = (TextView) convertView.findViewById(R.id.txt_cart_price);
        TextView store = (TextView) convertView.findViewById(R.id.txt_cart_store);
        TextView size = (TextView) convertView.findViewById(R.id.txt_cart_size);
        TextView description = (TextView) convertView.findViewById(R.id.txt_cart_description);
        ImageView shirtsImage = (ImageView) convertView.findViewById(R.id.image_view_cart);
        Button deleteFromCartButton = (Button) convertView.findViewById(R.id.deleteItemButton);

        // Populate the data into the template view using the data object
        brand.setText("Brand:" + "  " + item.getBrand());
        price.setText("Price:" + "  $" + item.getPrice());
        store.setText("Store:" + "  " + item.getStore());
        size.setText("Size:" + "  " + item.getSize());
        description.setText("Description:" + "  " + item.getDescription());

        Context context = parent.getContext();

        try { // Find the image name from database ID column and link that up with the name of image in drawable folder
            String itemName = item.getID();
            String uri = "@drawable/"+itemName;
            int imageResource = context.getResources().getIdentifier(uri, null, context.getApplicationContext().getPackageName());
            Drawable drawable = context.getResources().getDrawable(imageResource);
            shirtsImage.setImageDrawable(drawable);
        }

        catch (Exception e) { // If no image found for item, just set the image to a default image in drawable folder
            // TODO Auto-generated catch block
            Drawable drawable = context.getResources().getDrawable(R.drawable.shirts); // Default image
            shirtsImage.setImageDrawable(drawable);
        }

        deleteFromCartButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub

                // To get the item from the listView for which the Add to Cart button is pressed
                Item item = getItem(position);

                // Delete the item from the cart by pressing the delete item button
                DatabaseHelper db = new DatabaseHelper(getContext());
                db.deleteItemFromCart(item.getID());

                // Update the listView to reflect the changes
                notifyDataSetChanged();
            }

        });

        // Return the completed view to render on screen
        return convertView;

    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }

}

shoppingCart.java

package ankitkaushal.app.healthysizing;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.io.IOException;
import java.util.ArrayList;

public class shoppingCart extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shopping_cart);

        final DatabaseHelper dbhelper;
        final ListView listView;
        final ListAdapter cartAdapter;

        dbhelper = new DatabaseHelper(getApplicationContext());
        try {
            dbhelper.createDataBase();
        } catch (IOException e) {
            e.printStackTrace();
        }

        listView = (ListView) findViewById(R.id.itemsInCartList);
        ArrayList<Item> cartList = dbhelper.getItemsInCart();

        if (cartList != null) {
            cartAdapter = new CartItemsAdapter(getApplicationContext(), cartList);
            listView.setAdapter(cartAdapter);
        }

        listView.setEmptyView(findViewById(R.id.emptyCartMessage));

        TextView displayTotalPrice = (TextView) findViewById(R.id.totalCartPrice);
        String totalCartPrice = dbhelper.getTotalCartPrice();

        if (totalCartPrice != null) {
            displayTotalPrice.setText("Total Price: $" + totalCartPrice);
        }

        else {
            displayTotalPrice.setText("Total Price: $0.00");
        }

    }

}

從您的后備列表對象中刪除該項目。

deleteFromCartButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub

            // To get the item from the listView for which the Add to Cart button is pressed
            Item item = getItem(position);

            // Delete the item from the cart by pressing the delete item button
            DatabaseHelper db = new DatabaseHelper(getContext());
            db.deleteItemFromCart(item.getID());

            // Remove item
            remove(item);

            // Update the listView to reflect the changes
            notifyDataSetChanged();
        }

});
deleteFromCartButton.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view) {
                    // TODO Auto-generated method stub

                    // To get the item from the listView for which the Add to Cart button is pressed
                    Item item = (Item)view.getTag();

                    // Delete the item from the cart by pressing the delete item button
                    DatabaseHelper db = new DatabaseHelper(getContext());
                    db.deleteItemFromCart(item.getID());

                    // Remove item
                    remove(item);

                    // Update the listView to reflect the changes
                    notifyDataSetChanged();
                }
}
deleteFromCartButton.setTag(getItem(position));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM