簡體   English   中英

我有一個連續包含超過1個值的列表視圖,當我在Edittext中鍵入內容時,如何用名稱值過濾列表?

[英]I have a listview which contains more that 1 value in a row, how can i filter the list with a name value when i type in Edittext?

如果連續只有一個值。 我得到了答案,但我不止一個。

這是我的主班,我無法決定如何填寫Textwatcher的內容。 “ CityArray”是我創建行的類,“ CityXmlParse”是我從原始文件夾中的XML文件“ cities.xml”中獲取數據的類。 每行都有一個圖像和一個名稱,我想在鍵入時按名稱過濾行,但鍵入(帶有圖像)后必須看到整行。

公共類TravelFinalActivity擴展Activity {

EditText sc;
ListView lv;
List<CityData> citylist;
CityArray adapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    sc = (EditText) findViewById(R.id.citySearch);

    CityXmlParse cityParse = new CityXmlParse();
    InputStream in = getResources().openRawResource(R.raw.cities);
    cityParse.xmlParse(in);

    citylist = cityParse.getList();        
    adapter = new CityArray(getApplicationContext(),R.layout.city_row, citylist);      
    lv = (ListView) this.findViewById(R.id.cityList);
    lv.setAdapter(adapter);      
    lv.setTextFilterEnabled(true);        

    sc.addTextChangedListener(new TextWatcher() {

        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub


        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
       }
  });   

}}

這是xml解析的類。

公共類CityXmlParse {

private final List<CityData> list = new ArrayList<CityData>();


private String getNodeValue(NamedNodeMap map, String key) {
    String nodeValue = null;
    Node node = map.getNamedItem(key);
    if (node != null) {
        nodeValue = node.getNodeValue();
    }

  return nodeValue;
}

public List<CityData> getList(){
    return this.list;
}


public void xmlParse(InputStream in){
try {
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document doc = builder.parse(in, null);
    NodeList cityList = doc.getElementsByTagName("city");

    for(int i=0; i<cityList.getLength(); i++){

    final NamedNodeMap cityAttr = cityList.item(i).getAttributes();
    final String cityName=getNodeValue(cityAttr, "name");
    final String cityInfo=getNodeValue(cityAttr, "info");   

    CityData cityObj = new CityData(cityName, cityInfo, cityName + ".png");

    list.add(cityObj);  

    }       
}catch (Throwable T) {}

}

}

最后,這是我的“ CityArray”構造函數和用於自定義行的方法。

public CityArray(Context context, int textViewResourceId, List<CityData> citylist) {
    super(context, textViewResourceId, citylist);
    this.citylist=citylist;
    this.context=context;
}

public View getView(int position, View convertView, ViewGroup parent) {
    View rowView = convertView;
    if(rowView == null){
        inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rowView = inflater.inflate(R.layout.city_row, parent,false);
    } 

    CityData cityObj = getItem(position);

    cityImage = (ImageView) rowView.findViewById(R.id.city_image);      
    cityName = (TextView) rowView.findViewById(R.id.city_name);

    String imgPath = ASSETS_DIR + cityObj.resourceImg;      
    try {
        Bitmap bitmap = BitmapFactory.decodeStream(this.context.getResources().getAssets().open(imgPath));
        cityImage.setImageBitmap(bitmap);
    } catch (IOException e) {
        e.printStackTrace();
    }

    cityName.setText(cityObj.name);     

    return rowView;
}

提前致謝!

  • 使ArrayAdapter項目可過濾: ArrayAdapter具有內置的ArrayFilter ,它通過對每個對象使用toString().toLowerCase()的字符串來比較適配器列表中的對象。 如果在CityData類中重寫toString()並返回城市名稱,則ArrayAdapter應該能夠有效地過濾項目。

  • 在啟用自動文本過濾器ListViewListView或者使用android:textFilterEnabled="true"的布局,或使用設置的代碼setTextFilterEnabled(true) 現在,只要listView成為焦點,用戶都可以簡單地抬起鍵盤並開始輸入,列表項將被自動過濾。

  • 在明確設置文本過濾器ListView使用setFilterText()的方法ListView 不要忘記稍后清除此內容。

您可以通過查看相關的Android Sources揭示更多細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM