2012-09-05 65 views
0

我有問題,我不能做一個搜索我的列表視圖!在列表視圖適配器使用過濾器膨脹

我試圖用inflate實現listview並做一個搜索,但不幸的是我不能...在logcat中沒有出現錯誤,並嘗試調試,但不幸的是,顯然它是沒事的...簡單地編寫時不在textview中列表視圖filtar開始......

下面是我的代碼

FriendRequestListener.class

/* 
* callback after friends are fetched via me/friends. 
* 
*/ 
public class FriendsRequestListener extends BaseRequestListener { 

    @Override 
    public void onComplete(final String response, final Object state) { 
     dialog.dismiss(); 

     try{ 
      arrayName = new ArrayList<String>(); 
      jsonArray = new JSONObject(response).getJSONArray("data"); 
      for (int i = 0; i < jsonArray.length(); i++) { 
       JSONObject json_data = jsonArray.getJSONObject(i); 
       if(json_data.has("name")){ 
        String getFriendName = json_data.getString("name"); 

        arrayName.add(getFriendName); 
       }else{ 
        String getFriendName = null; 
        arrayName.add(getFriendName); 
       } 
      } 
     }catch(JSONException e){ 
      Log.d(TAG, e.getMessage()); 
      return; 
     } 

     stringName = new String[arrayName.size()]; 
     stringName = arrayName.toArray(stringName); 

     EscolhaAmigosFacebook.this.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      adapter = new FriendListAdapter(EscolhaAmigosFacebook.this, stringName, arrayName); 
      friendsListView.setTextFilterEnabled(true); 
      friendsListView.setAdapter(adapter); 
     } 
     }); 
    } 

FriendApapter.class

/** 
* Definition of the list adapter 
*/ 
public class FriendListAdapter extends BaseAdapter implements Filterable { 

    String[] fetFriendName; 

    List<String> arrayList; 
    List<String> mOriginalValues; 

    LayoutInflater mInflater = null; 
    EscolhaAmigosFacebook friendsList; 

    FriendListAdapter(EscolhaAmigosFacebook friendsList, String[] stringName, ArrayList<String> arrayName) { 
     this.friendsList = friendsList; 
     if (Utility.model == null) { 
      Utility.model = new FriendsGetProfilePics(); 
     } 
     Utility.model.setListener(this); 

     fetFriendName = stringName; 

     arrayList = new ArrayList<String>(); 
     mOriginalValues = arrayName; 

     mInflater = LayoutInflater.from(friendsList.getBaseContext()); 

    } 

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

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

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

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     JSONObject jsonObject = null; 
     final ViewHolder holder; 
     View vi = convertView; 

     try { 
      jsonObject = jsonArray.getJSONObject(position); 
     } catch (JSONException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

     if (vi == null) { 

      vi = mInflater.inflate(R.layout.friend_item, null); 
      holder = new ViewHolder(); 
      holder.profile_pic = (ImageView) vi.findViewById(R.id.profile_pic); 

      TextView txtFriendsName = (TextView)vi.findViewById(R.id.name); 
      txtFriendsName.setText(fetFriendName[position]); 
      vi.setTag(holder); 
     }else{ 
      holder = (ViewHolder) vi.getTag(); 
     } 

     try { 
       holder.profile_pic.setImageBitmap(Utility.model.getImage(
       jsonObject.getString("id"), jsonObject.getString("picture"))); 
      } catch (JSONException e) { 
       holder.name.setText(""); 
      } 
     return vi; 
     } 



    @Override 
    public Filter getFilter() { 
     Filter filter = new Filter(){ 

      @SuppressWarnings("unchecked") 
      @Override 
      protected void publishResults(CharSequence constraint, FilterResults results) { 
       arrayList = (List<String>) results.values; 
       notifyDataSetChanged(); 
      } 

      @Override 
      protected FilterResults performFiltering(CharSequence constraint) { 

       FilterResults results = new FilterResults(); 
       List<String> FilteredArrList = new ArrayList<String>(); 

       if (constraint == null || constraint.length() == 0) { 
        results.count = mOriginalValues.size(); 
        results.values = mOriginalValues; 
       } else { 
        constraint = constraint.toString(); 

        for (int i = 0; i < mOriginalValues.size(); i++) { 
         String data = mOriginalValues.get(i); 

         if (data.toLowerCase().startsWith(constraint.toString())) { 
          FilteredArrList.add(data); 
         } 
        } 

        results.count = FilteredArrList.size(); 
        results.values = FilteredArrList; 
       } 

       return results; 
      } 

     }; 
     return filter; 
    } 

} 

方法的onComplete

 et_search = (EditText) findViewById(R.id.et_Search); 
    et_search.addTextChangedListener(filterTextWatcher); 

} 

private TextWatcher filterTextWatcher = new TextWatcher() { 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     adapter.getFilter().filter(s.toString()); 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
     // TODO Auto-generated method stub 

    } 

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

    } 
}; 

我知道這看起來很棒,但如果有人有耐心幫我,拜託了! 我試過看各種帖子,但什麼也沒有!

回答

0

我沒有使用過濾器又一個適配器上,但我用適配器了很多,從我可以過濾你把結果上ArrayList中後告訴我們,但你不要在getCount將使用ArrayList, getItem,getView,因此不會使用您在數據上創建的過濾器,而是使用完整的項目列表。