繁体   English   中英

删除元素后如何刷新ListView?

[英]How to refresh ListView after deleting element?

我已经创建了一个列表视图,但是当我删除一个元素时,它不会刷新。 我努力了

 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中刷新列表视图。

public void onClick(View v) {

                // HERE I WANT REFRESH MY LISTVIEW

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

您已经在MainActivity声明了ArrayProdotto ,并且正在CustomAdapterOrdini中显示rowItem中的数据。 您必须同时从列表中删除数据并调用notifyDataSetChanged();

像下面的代码。

Del.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

         // HERE I WANT REFRESH MY LISTVIEW
         MainActivity.ArrayProdotto.remove(position); //Delete from main source
         rowItem.remove(position) // Delete from adapter
         CustomAdapter.ShowDialog("Elemento eliminato con successo!", context);
         notifyDataSetChanged(); // Refresh Adapter

    }
});

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

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

2)。 调用adapter.notifyDataSetChanged();

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM