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