2015-11-04 41 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 –