簡體   English   中英

刷新列表查看項目android

[英]Refreshing listView Items android

我的問題是我實現了在列表視圖項上具有可過濾功能的搜索視圖。 它運作良好,但是執行搜索並且searchView為空后,我無法獲得之前的項目。 我試過notifyDataSetChanged但對我來說不起作用。 我該怎么辦?

....
 private ListView mListNotes;
 NoteListAdapter na;

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mListNotes = (ListView) findViewById(R.id.main_listview);
        mListNotes.setTextFilterEnabled(true);

    }
    @Override
    protected void onResume() {
        super.onResume();
        //load data into the listview and display
        mListNotes.setAdapter(na); 
   }

    @Override
    public boolean onQueryTextChange(String query) {
        if (!query.equals("")) {
            na.getFilter().filter(query);  // filter listView items when text is inputted.

        } else {
         na.notifyDataSetChanged();         // what do i put here to refresh my list view after search?

        }
        return false;
    }
}

// ListView Adapter


class NoteListAdapter extends ArrayAdapter<Note> implements Filterable{
    List<Note> objects;
    private List<Note> mStringFilterList;
     Filter filter;
    private static final int WRAP_CONTENT_LENGTH = 5;
    public NoteListAdapter(Context context, int resource, List<Note> objects) {
        super(context, resource, objects);
        this.objects = objects;
      this.mStringFilterList = objects;

    }

   @Override
  public int getCount() {
      return objects.size();
   }

    @Nullable
   @Override
    public Note getItem(int position) {
       return objects.get(position);
    }

    @Override
   public long getItemId(int position) {
       return position;
   }


    @Override
    public Filter getFilter() {
        filter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                ArrayList<Note> tempList= new ArrayList<>();
                FilterResults results = new FilterResults();
                if (constraint != null && objects != null) {
                    for(Note singleNote : objects) {
                        if( singleNote.getTitle().contains(constraint))
                            tempList.add(singleNote);
                    }
                    results.values = tempList;
                    results.count = tempList.size();
                }

                return results;
            }
            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                objects = (ArrayList<Note>) results.values;
                notifyDataSetChanged();

            }
        };
        return filter;

        }


    }


}

您正在用過濾后的數據替換原始數據。 使用以下代碼:

class NoteListAdapter extends ArrayAdapter<Note> implements Filterable {
        List<Note> objects;
        private List<Note> originalList = new ArrayList<>();
        Filter filter;
        private static final int WRAP_CONTENT_LENGTH = 5;

        public NoteListAdapter(Context context, int resource, List<Note> objects) {
            super(context, resource, objects);
            this.objects = objects;
            this.originalList.addAll(objects);
        }

        @Override
        public int getCount() {
            return objects.size();
        }

        @Nullable
        @Override
        public Note getItem(int position) {
            return objects.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }


        @Override
        public Filter getFilter() {
            filter = new Filter() {
                @Override
                protected FilterResults performFiltering(CharSequence constraint) {
                    ArrayList<Note> tempList = new ArrayList<>();
                    FilterResults results = new FilterResults();
                    if (objects != null) {
                        if(constraint != null && !constraint.equals("")) {
                            for (Note singleNote : objects) {
                                if (singleNote.getTitle().contains(constraint))
                                    tempList.add(singleNote);
                            }
                            results.values = tempList;
                            results.count = tempList.size();
                        }else {
                            tempList.clear();
                            tempList.addAll(originalList);
                            results.values = tempList;
                            results.count = tempList.size();
                        }
                    }

                    return results;
                }

                @Override
                protected void publishResults(CharSequence constraint, FilterResults results) {
                    objects = (ArrayList<Note>) results.values;
                    notifyDataSetChanged();
                }
            };
            return filter;
        }
    }

希望能幫助到你:)

閱讀注釋,其中代碼需要更改或替換整個適配器類。

class NoteListAdapter extends ArrayAdapter<Note> implements Filterable
 {
List<Note> objects;
private List<Note> mStringFilterList;
 Filter filter;
private static final int WRAP_CONTENT_LENGTH = 5;
public NoteListAdapter(Context context, int resource, List<Note> objects) {
    super(context, resource, objects);
    this.objects = objects;
  this.mStringFilterList = objects;

}

 @Override
  public int getCount() {
  return mStringFilterList.size();  // change this line
  }

 @Nullable
 @Override
 public Note getItem(int position) {
   return mStringFilterList.get(position);   // change this line
 }

@Override
public long getItemId(int position) {
   return position;
 }


@Override
public Filter getFilter() {
    filter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            ArrayList<Note> tempList= new ArrayList<>();
            FilterResults results = new FilterResults();
            if (constraint != null && constraint.length() > 0 && objects != null) {
                for(Note singleNote : objects) {
                    if( singleNote.getTitle().contains(constraint))
                        tempList.add(singleNote);
                }
                results.values = tempList;
                results.count = tempList.size();
            }

             // add else block. 
            else
            {
             results.values = objects;
                results.count = objects.size(); 
            }

            return results;
        }
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            mStringFilterList = (ArrayList<Note>) results.values;  // change this line
            notifyDataSetChanged();

        }
    };
    return filter;

    }


}

暫無
暫無

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

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