【发布时间】:2014-06-10 00:08:36
【问题描述】:
我有一个很长的列表视图,所以我尝试添加一个搜索栏,这样我就不必滚动列表视图来查找我想要的内容。它似乎过滤掉了它想要过滤掉的任何一个,关于我做错了什么的任何线索?
这是列表:
public class ExList {
private List<Example> listExample = new ArrayList<Example>();
public void populateThingsList(){
listExample.add(new Example("asdf name", 1, "Example detail 1", "Example detail 2", R.drawable.1_icon, "Example detail 3"));
listExample.add(new Example("ghkj name", 2, "Example detail 1", "Example detail 2", R.drawable.2_icon, "Example detail 3"));
listExample.add(new Example("astg name", 3, "Example detail 1", "Example detail 2", R.drawable.3_icon, "Example detail 3"));
listExample.add(new Example("ghky name", 4, "Example detail 1", "Example detail 2", R.drawable.4_icon, "Example detail 3"));
listExample.add(new Example("ghee name", 5, "Example detail 1", "Example detail 2", R.drawable.5_icon, "Example detail 3"));
listExample.add(new Example("asre name", 6, "Example detail 1", "Example detail 2", R.drawable.6_icon, "Example detail 3"));
listExample.add(new Example("yuoi name6", 7, "Example detail 1", "Example detail 2", R.drawable.7_icon, "Example detail 3"));
listExample.add(new Example("oiuy name", 8, "Example detail 1", "Example detail 2", R.drawable.8_icon, "Example detail 3"));
listExample.add(new Example("fdsa name", 9, "Example detail 1", "Example detail 2", R.drawable.9_icon, "Example detail 3"));
listExample.add(new Example("lkjh name", 10, "Example detail 1", "Example detail 2", R.drawable.10_icon, "Example detail 3"));
}
以及我写的搜索方法:
public void filter(String search) {
Example ex;
String s = search.trim().toLowerCase();
String t;
for (int i = 0; i < listExample.size(); i++) {
ex = listExample.get(i);
t = ex.getName().trim().toLowerCase();
if (!t.contains(s)){
listExample.remove(ex);
}
}
}
以及获取中的文本何时更改的代码
searchText = (EditText) findViewById(R.id.txt_search);
searchText.addTextChangedListener(new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
if (!searchText.getText().toString().trim().isEmpty()){
listExample = exList.getListExample();
exList.filter(searchText.getText().toString());
populateListView();
}
if (searchText.getText().toString().trim().isEmpty()){
listExample = exList.getListExample();
populateListView();
//this resets the listview and actually works
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
我的 arrayadapter 类和 populatelistview 方法
private void populateListView() {
ArrayAdapter<Example> adapter = new MyListAdapter();
ListView list = (ListView) findViewById(R.id.exampleListView);
list.setAdapter(adapter);
}
private class MyListAdapter extends ArrayAdapter<Example> {
public MyListAdapter() {
super(MainActivity.this, R.layout.item_view, listExample);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View itemView = convertView;
if (itemView == null) {
itemView = getLayoutInflater().inflate(R.layout.item_view, parent, false);
}
Example currentExample = listExample.get(position);
ImageView imageView = (ImageView)itemView.findViewById(R.id.item_image);
imageView.setImageResource(currentExample.getIconId());
TextView detailThreeText = (TextView) itemView.findViewById(R.id.item_txtDThree);
detailThreeText.setText(currentExample.getDThree());
TextView detailTwoText = (TextView) itemView.findViewById(R.id.item_txtDTwo);
detailTwoText.setText(currentExample.getDTwo());
TextView detailOneText = (TextView) itemView.findViewById(R.id.item_txtDOne);
detailOneText.setText(currentExample.getDOne());
TextView nameText = (TextView) itemView.findViewById(R.id.item_txtName);
nameText.setText(currentExample.getName());
return itemView;
}
【问题讨论】:
-
你的意思是:它似乎过滤掉了它想要的那些?
-
自动完成列表视图对您的情况有帮助吗?
-
我不希望搜索栏自动完成。
-
我的意思是过滤掉它想要的任何东西,假设我在 EditText 中输入 ghk,而不是只显示示例“ghky name”和“ghkj name”,它会显示其他一些示例名称中没有 ghk
标签: java android listview arraylist