2015-11-04 77 views
1

我一直在试图实现一个简单的搜索到一个listview,我已经能够使用volley填充但所有都无济于事。 它不断检举此无法解析法“用getFilter()ListView标志的搜索功能 - 无法解析方法'getFilter()

我也尝试过其他民族质疑它涉及到同样的搜索问题,但没有一个似乎为我工作,所以我没有别的选择,而不是在这里发表我的。 下面是我的代码

public class MainActivity extends Activity { 

    private ListView mList; 
    private List<Movie> movieList = new ArrayList<Movie>(); 
    EditText inputSearch; 


    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
      setContentView(R.layout.activity_main); 

     mList = (ListView) findViewById(R.id.list); 
     inputSearch = (EditText) findViewById(R.id.inputSearch); 


      adapter = new CustomListAdapter(this, movieList); 
      mList.setAdapter(adapter); 

      fetchMovie(); 
      // A method i declared in the program to load data from server with volley library which works fine 

     //SEARCH TEXTCHANGE 
     inputSearch.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
        // When user changed the Text 
        MainActivity.this.adapter.getFilter().filter(cs); 
       //FLAGS Cannot resolve method 'getFilter()' here 
       } 

      @Override 
      public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
             int arg3) { 
        // TODO Auto-generated method stub 

      } 

      @Override 
      public void afterTextChanged(Editable arg0) { 
       // TODO Auto-generated method stub 
      } 
      }); 




    } 



} 

这里是CustomListAdapter代码填充我的ListView以及

public class CustomListAdapter extends BaseAdapter { 

     private Activity activity; 
    private LayoutInflater inflater; 
    private List<Movie> movieItems; 
     private String[] bgColors; 
     ImageLoader imageLoader = MyApplication.getInstance().getImageLoader(); 


     public CustomListAdapter(Activity activity, List<Movie> movieItems) { 
      this.activity = activity; 
      this.movieItems = movieItems; 
      bgColors = activity.getApplicationContext().getResources().getStringArray(R.array.movie_serial_bg); 
     } 
     @Override 
     public int getCount() { 
       return movieItems.size(); 
     } 

     @Override 
     public Object getItem(int location) { 
      return movieItems.get(location); 
     } 

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

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      if (inflater == null) 
       inflater = (LayoutInflater) activity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      if (convertView == null) 
       convertView = inflater.inflate(R.layout.list_row_image, null); 

      if (imageLoader == null) 
       imageLoader = MyApplication.getInstance().getImageLoader(); 
      NetworkImageView thumbNail = (NetworkImageView) convertView.findViewById(R.id.thumbnail); 

      TextView serial = (TextView) convertView.findViewById(R.id.serial); 
      TextView title = (TextView) convertView.findViewById(R.id.title); 
      TextView rating = (TextView) convertView.findViewById(R.id.rating); 
      TextView genre = (TextView) convertView.findViewById(R.id.genre); 
      TextView year = (TextView) convertView.findViewById(R.id.releaseYear); 

      // getting movie data for the row 
      Movie m = movieItems.get(position); 

      // thumbnail image 
      thumbNail.setImageUrl(m.getThumbnailUrl(), imageLoader); 

      // title 
      title.setText(m.getTitle()); 

      // rating 
      rating.setText("Rating: " + String.valueOf(m.getRating())); 

      // genre 
      String genreStr = ""; 
      for (String str : m.getGenre()) { 
       genreStr += str + ", "; 
       } 
      genreStr = genreStr.length() > 0 ? genreStr.substring(0, 
       genreStr.length() - 2) : genreStr; 
      genre.setText(genreStr); 

      // release year 
      year.setText(String.valueOf(m.getYear())); 

      String color = bgColors[position % bgColors.length]; 
      serial.setBackgroundColor(Color.parseColor(color)); 




      return convertView; 
    } 
} 

希望任何一个谁可以帮助我在什么我没有做正确的这个小问题有现在已经让我的整个项目感到沮丧了。

在此先感谢!

回答

1

"Cannot Resolve Method" getFilter()'。因为BaseAdapter类没有方法getFilter()。但ArrayAdaptergetFilter()方法。

你可以参考Custom Listview Adapter with filter AndroidHow could i filter the listview using baseadapter计算器岗位implement filterBaseAdapter class或者如果可能的话,你可以从BaseAdapter切换到ArrayAdapter

+0

我从来没有接近过这个简单而复杂的搜索功能的解决方案。 添加您的参考链接代码到我的代码使程序停止标记** getFilter()**但是当我尝试搜索时,没有反应,因为ListView中的内容从来没有改变,当我在EditView上输入 –

+0

@OkechukwuEze can you告诉我你的更新代码? –

+0

我向CustomListAdaptor添加了以下内容 public Filter ** getFilter()** { return mFilter; } 专用类** ** ItemFilter延伸过滤{ } 但搜索不填充列表。 你能告诉我我在这里失踪了吗? –

0

在文本改变可以拨打下面的方法和放置在适配器这种方法,经常检查“SEARCHTEXT”在电影中的ArrayList

// Filter Class 
     private void filter(String charText) { 
      charText = charText.toLowerCase(Locale.getDefault()); 
      searchText = charText; 
      Log.i("installed apps==", searchText); 
      appsList.clear(); 
      if (charText.length() == 0) { 
       appsList.addAll(arraylist); 
      } else { 
       for (AppPojo wp : arraylist) { 
        if (wp.getappName().toLowerCase(Locale.getDefault()).contains(charText)) { 
         appsList.add(wp); 
        } 
       } 

      } 
      notifyDataSetChanged(); 
     } 
1
public class AdapterClass extends BaseAdapter implements Filterable 
    { 
    public Filter getFilter() { 
    return new Filter(){ 

     @Override 
     protected Filter.FilterResults performFiltering(CharSequence constraint) 
     { 
      //This function performs filtering in worker thread 
      // And return Filter.FilterResults 

     } 

     @Override 
     protected void publishResults(CharSequence constraint, Filter.FilterResults results) 
     { 
       // update list from filter Result 
       // and call notifyDataSetChanged(); 

     } 
    }; 

    } 
} 
+0

我能够添加这段代码,它拦截了** getFilter **错误,但是当我搜索时,listView内容保持不变! 你能告诉我我失踪了吗?我知道我这次很近。 –

+0

我刚在这里发布我的更新代码 http://stackoverflow.com/questions/33525787/search-functionality-to-listview-using-baseadapter-not-populating-list-on-search –