简体   繁体   English

使用notifyDataSetChanged方法删除项目后如何刷新listView?

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

I have a listView that is being populated from my existing database and for each item that's displayed I also have a delete button so that I can delete it, and when I do that I want the screen to refresh and show the updated listView with that item that has been deleted. 我有一个从现有数据库中填充的listView ,对于显示的每个项目,我还有一个删除按钮,以便可以将其删除,当我这样做时,我希望屏幕刷新并显示带有该项目的更新的listView已被删除。

I understand that I'm supposed to use the notifyDataSetChanged method, but it's not doing the trick. 我知道我应该使用notifyDataSetChanged方法,但是并不能解决问题。 I've also tried going online for this problem, but nothing works, so I've posted some of my code below and if anyone can help, that would be great. 我也尝试过在线解决此问题,但是没有任何效果,因此我在下面发布了一些代码,如果有人可以提供帮助,那将是很好的。

CartItemsAdapter.java 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 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");
        }

    }

}

Remove the item from your backing list object. 从您的后备列表对象中删除该项目。

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