删除元素后如何刷新ListView?

时间:2015-07-16 08:50:47

标签: java android android-listview

我创建了一个列表视图但是当我删除一个元素时,它没有刷新。我试过了

 adapter.notifyDataSetChanged();

getListView().invalidateViews();
主要活动中的

case R.id.ordini:

                    Ordini O = new Ordini();
                    android.app.FragmentManager fragmentManager0 = getFragmentManager();
                    android.app.FragmentTransaction fragmentTransaction0 = fragmentManager0
                            .beginTransaction();

                    fragmentTransaction0.replace(R.id.frame, O);
                    fragmentTransaction0.commit();
  • Ordini.java

    public class Ordini extends ListFragment implements AdapterView.OnItemClickListener {
    
    int ArraySize;
    CustomAdapterOrdini adapter;
    private List<RowItemOrdini> rowItems;
    Button SendButton;
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
    
        return inflater.inflate(R.layout.ordini, null, false);
    
    }
    
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
    
        super.onActivityCreated(savedInstanceState);
    
        ArraySize = MainActivity.ArrayProdotto.size();
        SendButton = (Button) getActivity().findViewById(R.id.send_btn);
    
        rowItems = new ArrayList<RowItemOrdini>();
    
        for (int i = 0; i < ArraySize; i++) {
            RowItemOrdini items = new RowItemOrdini(
                    MainActivity.ArrayProdotto.get(i),
                    R.drawable.ic_delete_black_24dp,
                    MainActivity.ArrayCode.get(i),
                    MainActivity.ArrayPrezzo.get(i),
                    MainActivity.ArrayColli.get(i),
                    MainActivity.ArrayQuantita.get(i));
    
            rowItems.add(items);
        }
    
        adapter = new CustomAdapterOrdini(getActivity(), rowItems);
        setListAdapter(adapter);
    
        getListView().setOnItemClickListener(this);
    
    
        SendButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity(), "invio ordine in corso... ", Toast.LENGTH_SHORT)
                        .show();
                SendOrdine();
            }
        });
    }
    @Override
    public void onResume(){
        super.onResume();
        adapter.notifyDataSetChanged();
        getListView().invalidateViews();
    }
    
  • CustomAdapterOrdini

    public class CustomAdapterOrdini extends BaseAdapter {
    
    Context context;
    List<RowItemOrdini> rowItem;
    
    ImageView  Del;
    TextView Colli, Prezzo, Quantita, Code, Product;
    
    
    
    
    CustomAdapterOrdini(Context context, List<RowItemOrdini> rowItem) {
        this.context = context;
        this.rowItem = rowItem;
    
    }
    
    @Override
    public int getCount() {
    
        return rowItem.size();
    }
    
    @Override
    public Object getItem(int position) {
    
        return rowItem.get(position);
    }
    
    @Override
    public long getItemId(int position) {
    
        return rowItem.indexOf(getItem(position));
    }
    @Override
    public boolean  areAllItemsEnabled() {
        return false;
    }
    
    @Override
    public boolean isEnabled(int position) {
        return false;
    }
    
    
    
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    
        if (convertView == null) {
            LayoutInflater mInflater = (LayoutInflater) context
                    .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = mInflater.inflate(R.layout.list_ordini, null);
        }
        Code = (TextView) convertView.findViewById(R.id.prodcode);
        Product = (TextView) convertView.findViewById(R.id.PRODOTTO);
        Del = (ImageView) convertView.findViewById(R.id.del);
    
        Colli = (TextView) convertView.findViewById(R.id.T1);
        Prezzo = (TextView) convertView.findViewById(R.id.T2);
        Quantita = (TextView) convertView.findViewById(R.id.T3);
    
    
        Del.setFocusable(true);
        Del.setClickable(true);
    
        Del.setTag(convertView);
    
        final RowItemOrdini row_pos = rowItem.get(position);
        // setting the image resource and title
        Del.setImageResource(R.drawable.ic_delete_black_24dp);
        Product.setText(row_pos.getTitle());
        Code.setText(row_pos.getCode());
    
        Colli.setText(row_pos.getColli());
        Prezzo.setText(row_pos.getPrezzo());
        Quantita.setText(row_pos.getQuantita());
    
        Del.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
                // HERE I WANT REFRESH MY LISTVIEW
    
                MainActivity.ArrayQuantita.remove(0);
                MainActivity.ArrayCode.remove(0);
                MainActivity.ArrayProdotto.remove(0);
                MainActivity.ArrayColli.remove(0);
                MainActivity.ArrayPrezzo.remove(0);
    
                CustomAdapter.ShowDialog("Elemento eliminato con successo!", context);
    
            }
        });
    
        return convertView;
    
    }
    

有人可以帮我查看listview吗? 我想在CustomAdapterOrdini或Ordini.java中的onResume上刷新我的listview。

public void onClick(View v) {

                // HERE I WANT REFRESH MY LISTVIEW

有一种简单的方法吗? 非常感谢你!

2 个答案:

答案 0 :(得分:1)

您已在ArrayProdotto中声明MainActivity,并且您会在rowItem的{​​{1}}中显示您的数据。您必须从两个列表中删除数据并致电CustomAdapterOrdini

如下面的代码。

notifyDataSetChanged();

答案 1 :(得分:0)

1)。从适配器中删除您的项目:

adapter.remove(adapter.getItem(position));

2)。致电adapter.notifyDataSetChanged();

每次从适配器删除项目时都应该调用notifyDataSetChanged()。不仅在onResume

请注意,您应该从适配器中删除项目,更改ListView项目,而不是存储空间(ArrayListSQLite或其他)。