在android应用程序中使用listview按字母顺序过滤ListAdapter

在android应用程序中使用listview按字母顺序过滤ListAdapter,android,listview,android-listview,listadapter,Android,Listview,Android Listview,Listadapter,我正在开发一款android应用程序。应用程序在Listview中使用json和ListAdpter绑定数据。现在,我想根据用户在搜索框中写下的字母过滤这些数据。我尝试过这样做,但由于listview中绑定了多个数据,我不知道如何过滤它。下面是我的代码: private void getdatalatlog(double latitude, double longitude) { // TODO Auto-generated method stub //value=5;

我正在开发一款android应用程序。应用程序在Listview中使用json和ListAdpter绑定数据。现在,我想根据用户在搜索框中写下的字母过滤这些数据。我尝试过这样做,但由于listview中绑定了多个数据,我不知道如何过滤它。下面是我的代码:

private void getdatalatlog(double latitude, double longitude) {
    // TODO Auto-generated method stub
    //value=5;
    String url = "http://bizzcoder.co.in/php/comments.php?latitude='"+latitude+"'&longitude='"+longitude+"'&value='"+value+"'";
    aq.progress(R.id.progressBar1).ajax(url, JSONObject.class, this,"jsonCallback");

}


public void jsonCallback(String url, JSONObject json, AjaxStatus status) {  


    if (json != null) { 

    List<String> city = new ArrayList<String>();
    mCommentList = new ArrayList<HashMap<String, String>>();

        Gson gson = new GsonBuilder().create();
        try {

            JSONArray jsonResponse = json.getJSONArray("posts");
            city = gson.fromJson(jsonResponse.toString(),List.class);
            for (int i = 0; i < jsonResponse.length(); i++) {
                JSONObject c = jsonResponse.getJSONObject(i);       

                String title = c.getString(TAG_TITLE);
                String content = c.getString(TAG_MESSAGE);
                String username = c.getString(TAG_USERNAME);
                String lat = c.getString(TAG_LATITUDE);
                String log = c.getString(TAG_LONGITUDE);
                String cont = c.getString(TAG_CONTACT);

                // creating new HashMap
                HashMap<String, String> map = new HashMap<String, String>();

                map.put(TAG_TITLE, title);
                map.put(TAG_MESSAGE, content);
                map.put(TAG_USERNAME, username);
                map.put(TAG_LATITUDE, lat);
                map.put(TAG_LONGITUDE, log);
                map.put(TAG_CONTACT, cont);
                    // adding HashList to ArrayList
            mCommentList.add(map);


            }
        } 
        catch (JSONException e) {

            Toast.makeText(aq.getContext(), "Error in parsing JSON", Toast.LENGTH_LONG).show();
        }
        catch (Exception e) {
            Toast.makeText(aq.getContext(), "Something went wrong", Toast.LENGTH_LONG).show();
        }

        ListAdapter adapter = new SimpleAdapter(this, mCommentList,
                R.layout.single_post, new String[] { TAG_TITLE,TAG_USERNAME ,TAG_CONTACT ,TAG_MESSAGE ,TAG_LATITUDE , TAG_LONGITUDE 
                        }, new int[] { R.id.shop_name,R.id.address,R.id.contact,R.id.distance,R.id.latitude,R.id.longitude });


        setListAdapter(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
                Shopdetail.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                          
            }
        });

        ListView lv = getListView();    
        lv.setOnItemClickListener(new OnItemClickListener() {


            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                Intent intent = new Intent();
                 Bundle b = new Bundle();


                 String name= ((TextView) view.findViewById(R.id.shop_name)).getText().toString()+" , "+((TextView) view.findViewById(R.id.contact)).getText().toString();

                 String lati= ((TextView) view.findViewById(R.id.latitude)).getText().toString();

                 String longi= ((TextView) view.findViewById(R.id.longitude)).getText().toString();

                 b.putString("shop",name);
                 b.putString("lati",lati);
                 b.putString("long",longi);
                intent.setClass(Shopdetail.this, Mapview.class);
                intent.putExtras(b);
                startActivity(intent);
            }
        });
} 
     }
private void getdatalatlog(双纬度、双经度){
//TODO自动生成的方法存根
//数值=5;
字符串url=”http://bizzcoder.co.in/php/comments.php?latitude=“+latitude+”&经度=“+latitude+”&值=“+value+”;
ajax(url,JSONObject.class,这是“jsonCallback”);
}
public void jsonCallback(字符串url、JSONObject json、AjaxStatus状态){
如果(json!=null){
List city=new ArrayList();
mCommentList=newarraylist();
Gson Gson=new GsonBuilder().create();
试一试{
JSONArray jsonResponse=json.getJSONArray(“posts”);
city=gson.fromJson(jsonResponse.toString(),List.class);
for(int i=0;i

listview中绑定了多个详细信息,如店铺名称、联系电话、地址等。我只想按店铺名称进行筛选。但我在getfilter()方法下面画了一条红线。

实际上我是这样做的(EditText在工具栏上,但它可以放在任何需要的地方):

编辑:

要筛选自定义基本适配器,必须将其与适配器一起放入类中:

    List<Fanfic> fanfics;
    private List<Fanfic>filteredData = null;
    private ItemFilter mFilter = new ItemFilter();
public Filter getFilter() {
    return mFilter;
}

最后一件事,您必须实现Filterable。

实际上,我在适配器中遇到了错误,因为我使用了listadpter和getfilter方法,在listadpter中给出了错误。我不确定是否可以使用ListAdapter。为什么不使用castom BaseAdapter?在不超过5分钟的时间内获得与ListAdapter相同的结果。我将为您编辑我的文章,其中包含您需要放入过滤器适配器的代码。我想在listview中绑定多个数据,所以我使用了ListAdapter。我无法更改。用自定义适配器绑定数据有什么问题?在任何情况下,您都可以将它们绑定到列表中,并通知数据已更改。如果您确定必须使用ListAdapter,请尝试重载ListAdapter并在其中添加筛选器,就像我为您编写的BaseAdapter一样
private class ItemFilter extends Filter {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {

            String filterString = constraint.toString().toLowerCase();

            FilterResults results = new FilterResults();

            final List<Fanfic> list = fanfics;

            int count = list.size();
            final ArrayList<Fanfic> nlist = new ArrayList<Fanfic>(count);

            String filterableString ;

            for (int i = 0; i < count; i++) {
                filterableString = list.get(i).getName();
                if (filterableString.toLowerCase().startsWith(filterString)) {
                    nlist.add(list.get(i));
                }
            }

            results.values = nlist;
            results.count = nlist.size();

            return results;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            filteredData = (ArrayList<Fanfic>) results.values;
            notifyDataSetChanged();
        }

    }
public Filter getFilter() {
    return mFilter;
}