簡體   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