2011-11-17 110 views
-2

我已经通过其他类似的问题,但我无法找到解决方案。当用户按下按键序列时,我想使自定义数组适配器可过滤。如何在自定义数组适配器的listview中实现过滤器?

我是新来的。请让我知道我应该添加什么以及在哪里。

public class ShowTags extends ListActivity { 
Bundle savedInstanceState; 
private final Context activityContext = this; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.savedInstanceState = savedInstanceState; 
    new FetchTagFromDatabase().execute(); 
    populatetagList(); 
} 


/** 
* 
*/ 
private void populatetagList() { 
    ListView listView = getListView(); 
    listView.setTextFilterEnabled(true); 
    OnItemClickListener listener = new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view,int position, 
       long id) { 

      String tagId = (((TextView) view.findViewById(R.id.title)).getTag()).toString(); 
      Intent intent = new Intent(activityContext, ShowPostForTag.class); 
      intent.putExtra("tagId", tagId); 
      startActivity(intent); 
     } 
    }; 
    listView.setOnItemClickListener(listener); 
}  


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.show_tags_option_menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.refresh_tags: 
      this.onCreate(savedInstanceState); 
      break; 
    } 
    return true; 
} 


private class FetchTagFromDatabase extends AsyncTask<Void, Void, TagListAdaptor> { 
    private ProgressDialog dialog; 

    @Override 
    protected void onPreExecute(){ 
     dialog = new ProgressDialog(ShowTags.this); 
     dialog.setCancelable(true); 
     dialog.setMessage("Loading..."); 
     dialog.show(); 
    } 

    @Override 
    protected TagListAdaptor doInBackground(Void... arg0) { 

     List<Tag> tags = DatabseUtil.fetchAllTags(false, ShowTags.this); 
     TagListAdaptor adaptor = new TagListAdaptor(ShowTags.this,R.layout.tag_row,tags); 
     return adaptor; 
    } 

    @Override 
    protected void onPostExecute(TagListAdaptor adaptor) { 
     setListAdapter(adaptor); 
     dialog.dismiss(); 
    } 
} 

private class TagListAdaptor extends ArrayAdapter<Tag> implements Filterable{ 
    private List<Tag> tags; 

    public TagListAdaptor(Context context, 
      int textViewResourceId, 
      List<Tag> tags) { 
     super(context, textViewResourceId,tags); 
     this.tags = tags; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     if (view == null) { 
      LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = layoutInflater.inflate(R.layout.tag_row, null); 
     } 
     Tag tag = tags.get(position); 
     TextView titleTextView = (TextView) view.findViewById(R.id.title); 
     titleTextView.setText(tag.getTitle()); 
     titleTextView.setTag(tag.getId()); 
     Log.i("SHOW TAGS", tag.getTitle()); 
     TextView postCountTextView = (TextView) view.findViewById(R.id.post_count); 
     postCountTextView.setText(((Integer)tag.getPostCount()).toString()); 
     return view; 

    } 
} 

}

+1

请描述多一点你究竟做了什么,怎么做,哪些做不到。是的,你有代码*(代码是一个很好的问题的一部分)*,但有点太多了。包括我在内的大多数人都不会花一点时间来破译它所做的和意义。修剪它到相关的部分,以小的,容易得到的片段。否则,人们进来并基本阅读*“这是我的完整代码,我想要XY,为我修好并告诉我你什么时候完成了”*。这不会激励许多人利用他们的个人时间给你一个答案。 – 2011-11-17 16:02:59

回答

相关问题