Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中使用ArrayAdapter搜索自定义listview_Listview_Search_Filter_Adapter_Android Arrayadapter - Fatal编程技术网

在Android中使用ArrayAdapter搜索自定义listview

在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

我有一个自定义的listview,其中有两个TextView和一个ImageView。它使用一个定制的ArrayAdapter作为适配器,我想给它添加一个搜索功能。我已经看过了我能找到的每一个教程,但运气不好。然而,通过一个教程,我可以搜索常规的listview(不使用自定义适配器),但是这对我来说不起作用,因为我需要同时显示TextView和ImageView。不过,我只需要过滤其中一个文本视图,所以我不知道这会有多麻烦

无论如何,以下是主要活动:

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"/>