【发布时间】:2015-05-06 10:10:52
【问题描述】:
我似乎找不到如何使我的自定义 getFilter() 工作。
我的CustomAdapter 扩展了BaseAdapter,据我所知,它没有实现过滤,所以我需要自己做。我尝试了各种方法,但都没有成功。
Q1:方法是什么? (如何正确实现过滤?)
Q2:如何更改我的CustomAdapter(!) 以使过滤成为一项自动功能?
请不要忽视! 提前非常感谢!
这是一段代码:
Main.java
// import ....
public class MainActivity extends Activity {
ListView lv;
Context context;
EditText et;
CustomAdapter adapter;
View v;
public int [] Images= {R.drawable.1,R.drawable.2,R.drawable.3,R.drawable.4};
public String [] NameList={"item1","item2","item3","item4"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context=this;
lv=(ListView) findViewById(R.id.listView);
adapter = new CustomAdapter(this, fruitNameList,fruitImages);
lv.setAdapter(adapter);
et = (EditText)findViewById(R.id.editText);
/**
* Enabling Search Filter
* */
et.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
MainActivity.this.adapter.getFilter().filter(cs); // !!!!getFilter() is not found I tried to write methods on my own but nothing worked
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
}// end of onCreate
public void onClick (View v) {
switch (v.getId()) {
case R.id.search:
et.setVisibility(v.VISIBLE);
et.setHint("Search names...");
break;
}
}
public void SearchFilterEnable() {
/**
* Enabling Search Filter
* */
et.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
MainActivity.this.adapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
}
}
CustomAdapter.java
//import...
public class CustomAdapter extends BaseAdapter implements Filterable{
String [] result;
Context context;
int [] imageId;
private static LayoutInflater inflater=null;
public CustomAdapter(MainActivity mainActivity, String[] NameList, int[] Images) {
result=NameList;
context=mainActivity;
imageId=Images;
inflater = ( LayoutInflater )context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return result.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
public class Holder
{
TextView tv;
ImageView img;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Holder holder=new Holder();
View v;
v = inflater.inflate(R.layout.name_list, null);
holder.tv=(TextView) v.findViewById(R.id.textView1);
holder.img=(ImageView) v.findViewById(R.id.imageView1);
holder.tv.setText('\t'+result[position]);
holder.img.setImageResource(imageId[position]);
v.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "You Clicked " + result[position], Toast.LENGTH_LONG).show();
}
});
return v;
}
}
【问题讨论】:
-
究竟出了什么问题?您能否发布代码的最小 版本,足以重现该问题?
-
getFilter() 不调用
标签: android filtering baseadapter