2

LazyList で searchView を使用しようとしています。私の lazyAdapter では、 arraylist を更新しています。これはスムーズに機能しますが、リストビューは arrayList で更新されません。これが私のファイラーメソッドです。notifyDataSetChanged が機能しないと思います。リストビューを更新するにはどうすればよいですか?

public void filter(String charText) {

    charText = charText.toLowerCase(Locale.getDefault());
    //list.clear();
    list = new ArrayList<HashMap<String, String>>();
    if (charText.length() == 0) {
        list.addAll(arraylist);
    } 
    else 
    {
        for (HashMap<String, String> map : arraylist) 
        {
            if (map.get("radio").toString().toLowerCase(Locale.getDefault()).contains(charText)) 
            {
                list.add(map);
            }
        }
    }
    notifyDataSetChanged();
}
4

3 に答える 3

1

LazyList のリストビューは新しい arraylist で更新できません

を呼び出す前に、Listview の現在の Adapter に新しいリストを追加していないためnotifyDataSetChanged():

メソッドlistを使用してアダプターに追加します。addAll

listviewAdapter.addAll(list);
//notify data-source change to adapter
 notifyDataSetChanged();

メソッドが利用できない場合addAllは、Adapter クラスでメソッドを作成し、リストをパラメーターとして渡し、add メソッドを呼び出します。

public void addAll(ArrayList<HashMap<String, String>> data) {
     for(String item: data) {
         add(item);
       }
       notifyDataSetChanged();
  }
于 2015-01-17T11:43:41.363 に答える
0
        public class MovieListAdapter extends BaseAdapter {
        private Context context;
        ArrayList<HashMap<String, String>> movielist;
        private ArrayList<HashMap<String, String>> listAdapter;

        public MovieListAdapter(Context context, ArrayList<HashMap<String, String>> movielist) {
            this.context = context;
            this.movielist = movielist;
            this.listAdapter = new ArrayList<HashMap<String, String>>();
            this.listAdapter.addAll(movielist);

        }

        @Override
        public int getCount() {

            return movielist.size();
        }

        @Override
        public Object getItem(int position) {
            return movielist.get(position);
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View griView = inflater.inflate(R.layout.movie_listitem, null);
            TextView textview = (TextView) griView.findViewById(R.id.catname);

            textview.setText(movielist.get(position).get("name"));
            textview.setSelected(true);
            ImageView imageView = (ImageView) griView.findViewById(R.id.catimage);

            DisplayMetrics metrics = context.getResources().getDisplayMetrics();
            int width = metrics.widthPixels / 3;
            int height = metrics.widthPixels / 3;

            // System.out.println(movielist.get(position).getMoviepicture());

            if (movielist.get(position).get("image").equals("")) {
                imageView.setImageResource(R.drawable.blankart);
            } else {
                Picasso.with(context)
                        .load(movielist.get(position).get("image"))
                        .resize(width, height).placeholder(R.drawable.blankart)
                        .noFade().into(imageView);
            }
            return griView;
        }

        public void filter(String charText) {
            charText = charText.toLowerCase(Locale.getDefault());
            movielist.clear();
            if (charText.length() == 0) {
                movielist.addAll(listAdapter);
            } else {
                for (HashMap<String, String> si : listAdapter) {
                    if (si.get("name").toLowerCase(Locale.getDefault())
                            .contains(charText)) {
                        movielist.add(si);
                    }
                }
            }
            notifyDataSetChanged();
        }
    }
    make you adapter like this
于 2015-01-17T11:51:17.320 に答える