-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