在Android中使用ArrayAdapter搜索自定义listview
我有一个自定义的listview,其中有两个TextView和一个ImageView。它使用一个定制的ArrayAdapter作为适配器,我想给它添加一个搜索功能。我已经看过了我能找到的每一个教程,但运气不好。然而,通过一个教程,我可以搜索常规的listview(不使用自定义适配器),但是这对我来说不起作用,因为我需要同时显示TextView和ImageView。不过,我只需要过滤其中一个文本视图,所以我不知道这会有多麻烦 无论如何,以下是主要活动:在Android中使用ArrayAdapter搜索自定义listview,listview,search,filter,adapter,android-arrayadapter,Listview,Search,Filter,Adapter,Android Arrayadapter,我有一个自定义的listview,其中有两个TextView和一个ImageView。它使用一个定制的ArrayAdapter作为适配器,我想给它添加一个搜索功能。我已经看过了我能找到的每一个教程,但运气不好。然而,通过一个教程,我可以搜索常规的listview(不使用自定义适配器),但是这对我来说不起作用,因为我需要同时显示TextView和ImageView。不过,我只需要过滤其中一个文本视图,所以我不知道这会有多麻烦 无论如何,以下是主要活动: public class ItemId ex
public class ItemId extends Activity {
// List view
private ListView lv;
// Listview Adapter
ArrayAdapter<String> adapter;
// Search EditText
EditText inputSearch;
// ArrayList for Listview
ArrayList<HashMap<String, String>> productList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.testo);
Context ctx = getApplication();
Resources res = ctx.getResources();
String[] options = res.getStringArray(R.array.item_names);
lv = (ListView) findViewById(R.id.list_view);
inputSearch = (EditText) findViewById(R.id.inputSearch);
// Adding items to listview
adapter = new ArrayAdapter<String>(this, R.layout.list_item_test, R.id.product_name, options);
lv.setAdapter(adapter);
/**
* Enabling Search Filter
* */
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
ItemId.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
}
});
}
}
public类ItemId扩展活动{
//列表视图
私有ListView lv;
//列表视图适配器
阵列适配器;
//搜索编辑文本
编辑文本输入搜索;
//Listview的ArrayList
ArrayList产品列表;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.testo);
Context ctx=getApplication();
Resources res=ctx.getResources();
String[]options=res.getStringArray(R.array.item_name);
lv=(ListView)findViewById(R.id.list\u视图);
inputSearch=(EditText)findViewById(R.id.inputSearch);
//向listview添加项目
适配器=新阵列适配器(此,R.layout.list\u item\u test,R.id.product\u name,选项);
低压设置适配器(适配器);
/**
*启用搜索筛选器
* */
inputSearch.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列cs、int arg1、int arg2、int arg3){
//当用户更改文本时
ItemId.this.adapter.getFilter().filter(cs);
}
@凌驾
更改前的公共void(字符序列arg0、int arg1、int arg2、,
int arg3){
//TODO自动生成的方法存根
}
@凌驾
public void PostTextChanged(可编辑arg0){
//TODO自动生成的方法存根
}
});
}
}
以下是自定义适配器:
public class ItemIDAdapter extends ArrayAdapter<String> implements Filterable {
public LayoutInflater mInflater;
public String[] mStrings;
public String[] mIds;
public TypedArray mIcons;
public int mViewResourceId;
public ItemIDAdapter(Context ctx, int viewResourceId,
String[] strings, String[] ids, TypedArray icons) {
super(ctx, viewResourceId, strings);
mInflater = (LayoutInflater)ctx.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
mStrings = strings;
mIds = ids;
mIcons = icons;
mViewResourceId = viewResourceId;
}
@Override
public int getCount() {
return mStrings.length;
}
@Override
public String getItem(int position) {
return mStrings[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = mInflater.inflate(mViewResourceId, null);
ImageView iv = (ImageView)convertView.findViewById(R.id.option_icon);
iv.setImageDrawable(mIcons.getDrawable(position));
TextView tv = (TextView)convertView.findViewById(R.id.option_text);
tv.setText(mStrings[position]);
TextView tv1 = (TextView)convertView.findViewById(R.id.itemids);
tv1.setText(mIds[position]);
return convertView;
}
}
公共类ItemIDAdapter扩展ArrayAdapter实现可过滤{
公共布局更扁平,更扁平;
公共字符串[]mStrings;
公共字符串[]mIds;
公共类型Darray mIcons;
公共int mViewResourceId;
公共项IDAdapter(上下文ctx,int-viewResourceId,
字符串[]字符串、字符串[]ID、类型(Darray图标){
超级(ctx、viewResourceId、字符串);
mInflater=(LayoutInflater)ctx.getSystemService(
上下文。布局(充气机和服务);
mStrings=字符串;
mIds=ids;
mIcons=图标;
mViewResourceId=viewsourceid;
}
@凌驾
public int getCount(){
返回mStrings.length;
}
@凌驾
公共字符串getItem(int位置){
返回mStrings[位置];
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
convertView=mInflater.inflate(mViewResourceId,null);
ImageView iv=(ImageView)convertView.findViewById(R.id.option_图标);
iv.setImageDrawable(mIcons.getDrawable(位置));
TextView tv=(TextView)convertView.findViewById(R.id.option\u text);
tv.setText(mStrings[position]);
TextView tv1=(TextView)convertView.findViewById(R.id.ItemId);
tv1.setText(中间[位置]);
返回视图;
}
}
希望有人能帮助我,因为这是一个非常乏味的挑战,因为我是Android开发的新手,我没有选择。谢谢你的帮助 在oncreate()中:
在您的布局中:
<EditText android:id="@+id/inputSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Search.."
android:inputType="textVisiblePassword"/>
<EditText android:id="@+id/inputSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Search.."
android:inputType="textVisiblePassword"/>