过滤器的Andr​​oid的ListView [英] Filter Android ListView

查看:126
本文介绍了过滤器的Andr​​oid的ListView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有每行中的项目和子项的列表图。我有我想用文字键入过滤列表一个EditText场。我希望能够搜索的项目和子项目。有人能指出我在正确的方向上我怎么能这样做呢?

 进口的java.util.ArrayList;
进口的java.util.HashMap;
进口的java.util.List;
进口java.util.Locale中;
进口的java.util.Map;进口android.content.Intent;
进口android.os.Bundle;
进口android.text.Editable;
进口android.text.TextWatcher;
进口android.view.View;
进口android.widget.AdapterView;
进口android.widget.AdapterView.OnItemClickListener;
进口android.widget.ArrayAdapter;
进口android.widget.EditText;
进口android.widget.ListView;
进口android.widget.SimpleAdapter;
进口android.widget.TextView;进口com.google.android.gms.maps.model.Marker;公共类FarmMarketList扩展RSFM
{
    ListView的marketList;
    ArrayList的<串GT;标题=新的ArrayList<串GT;();
    ArrayList的<串GT;地址=新的ArrayList<串GT;();
    ArrayAdapter<串GT;适配器;
    的EditText listSearch;    公共无效的onCreate(捆绑savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.farm_market_​​list);
        marketList =(ListView控件)findViewById(R.id.listFarmMarkets);
        listSearch =(EditText上)findViewById(R.id.listSearch);        为(M标记:名单)
        {
            titles.add(m.getTitle());
            addresses.add(m.getSnippet());
        }        清单<地图<字符串,字符串>>数据=新的ArrayList<地图<字符串,字符串>>();        的for(int i = 0; I< titles.size();我++)
        {
            地图<字符串,字符串>基准=新的HashMap<字符串,字符串>(2);
            datum.put(称号,titles.get(I));
            datum.put(字幕,addresses.get(ⅰ));
            data.add(基准面);
        }        SimpleAdapter simpleAdapter =新SimpleAdapter(FarmMarketList.this,数据,android.R.layout.simple_list_item_2,新的String [] {标题,副标题},新的INT [] {android.R.id.text1,android.R .id.text2});
        marketList.setAdapter(simpleAdapter);        //行选择
        marketList.setOnItemClickListener(新OnItemClickListener()
        {
            @覆盖
            公共无效onItemClick(适配器视图<>母公司,视图V,INT位置,长的ID)
            {
                TextView的文本1 =(TextView中)v.findViewById(android.R.id.text1);
                TextView的文本2 =(TextView中)v.findViewById(android.R.id.text2);                意图I =新意图(FarmMarketList.this,FarmMarketDetails.class);
                i.putExtra(selectedTitle,text1.getText());
                i.putExtra(selectedAddress,text2.getText());
                startActivity(ⅰ);
            }
        });
    }
}

编辑:我加了这个$​​ C $ C,但它会导致应用程序崩溃的时候我在外地的EditText开始键入

  listSearch.addTextChangedListener(新TextWatcher()
        {
            @覆盖
            公共无效onTextChanged(CharSequence的CS,INT ARG1,ARG2 INT,INT ARG3)
            {
                。FarmMarketList.this.adapter.getFilter()过滤器(CS);
            }            @覆盖
            公共无效beforeTextChanged(CharSequence的为arg0,ARG1 INT,INT ARG2,诠释ARG3)
            {
                // TODO自动生成方法存根
            }            @覆盖
            公共无效afterTextChanged(编辑为arg0)
            {
                // TODO自动生成方法存根
            }
        });


解决方案

我把它加入工作

  marketList.setTextFilterEnabled(真);

和转产的onTextChange()方法来

  FarmMarketList.this.simpleAdapter.getFilter()过滤器(CS)。

I have a list view with items and sub items in each row. I have an EditText field that I want to use to filter the list as text is typed. I want to be able to search the items and sub items. Can someone point me in the right direction on how I can do this?

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

import com.google.android.gms.maps.model.Marker;

public class FarmMarketList extends RSFM
{
    ListView marketList;
    ArrayList<String> titles = new ArrayList<String>();
    ArrayList<String> addresses = new ArrayList<String>();
    ArrayAdapter<String> adapter;
    EditText listSearch;

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.farm_market_list);
        marketList = (ListView) findViewById(R.id.listFarmMarkets);
        listSearch = (EditText) findViewById(R.id.listSearch);

        for(Marker m : list)
        {
            titles.add(m.getTitle());
            addresses.add(m.getSnippet());
        }

        List<Map<String, String>> data = new ArrayList<Map<String, String>>();

        for(int i = 0; i < titles.size(); i++)
        {
            Map<String, String> datum = new HashMap<String, String>(2);
            datum.put("title", titles.get(i));
            datum.put("subtitle", addresses.get(i));
            data.add(datum);
        }

        SimpleAdapter simpleAdapter = new SimpleAdapter(FarmMarketList.this, data, android.R.layout.simple_list_item_2, new String[] {"title", "subtitle"}, new int[] {android.R.id.text1, android.R.id.text2});
        marketList.setAdapter(simpleAdapter);

        // Row Selection
        marketList.setOnItemClickListener(new OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position, long id)
            {
                TextView text1 = (TextView) v.findViewById(android.R.id.text1);
                TextView text2 = (TextView) v.findViewById(android.R.id.text2);

                Intent i = new Intent(FarmMarketList.this, FarmMarketDetails.class);
                i.putExtra("selectedTitle", text1.getText());
                i.putExtra("selectedAddress", text2.getText());
                startActivity(i);
            }
        });
    }
}

EDIT: I added this code, but it cause the app to crash when I start typing in the EditText field.

listSearch.addTextChangedListener(new TextWatcher()
        {
            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3)
            {
                FarmMarketList.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
            }
        });

解决方案

I got it working by adding

marketList.setTextFilterEnabled(true);

and changing the line in the onTextChange() method to

FarmMarketList.this.simpleAdapter.getFilter().filter(cs);

这篇关于过滤器的Andr​​oid的ListView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆