0

私には問題があります。次のようにリストを作成しました。

List<Map<String, String>> ShopsList = new ArrayList<Map<String,String>>();
       private void initList() {
        // We add the cities
           ShopsList.add(createShop("Antwerpen", "Broer Bretel"));
           ShopsList.add(createShop("Antwerpen", "Caffènation"));
           ShopsList.add(createShop("Antwerpen", "Caffènation - Take Out Nation"));
           ShopsList.add(createShop("Antwerpen", "Coffeelabs"));
           ShopsList.add(createShop("Antwerpen", "De Dikke Kat"));
           ShopsList.add(createShop("Antwerpen", "Mlle Loustache")); 
           ShopsList.add(createShop("Berchem", "Broer Bretel"));
           ShopsList.add(createShop("Berchem", "Caffènation"));
           ShopsList.add(createShop("Berchem", "Caffènation - Take Out Nation"));

private HashMap<String, String> createShop(String key, String name) {
        HashMap<String, String> shop = new HashMap<String, String>();
        shop.put(key, name);
        return shop;
       }

そこで、SimpleAdapter を使用して、このリストを Listview に表示します。しかし、私が望むのは、特定のキーワードを含むリストのデータのみを表示できるようにすることです。私もです

ListView lv = (ListView) findViewById(R.id.listView);

        SimpleAdapter simpleAdpt = new SimpleAdapter(this, ShopsList, android.R.layout.simple_list_item_1,
                new String[] {"Antwerpen"}, new int[] {android.R.id.text1});

        lv.setAdapter(simpleAdpt);

私がこれを行うと、彼は正しいキーワードを含むデータのみを表示しますが、他のエントリは空として追加します。そのため、2 番目のキーワードを尋ねると、彼は最初に 6 つの空の場所を追加してから、正しいエントリを表示します。

どうすればいいですか?欲しいキーワードでエントリの場所を追加する必要があると思いますが、これらの場所を簡単に取得するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

0

編集:

ご指摘の通り、SimpleAdapter と ArrayAdapter を間違えました。申し訳ありませんが、実装を ArrayAdapter に変更したい場合 (IMHO の方がはるかに単純です)、コードは以下のとおりです。

オリジナル:

android.R.id.text1に値を入力すると、リストから各要素がArrayAdapter呼び出されます。.toString()

目的を達成する方法はいくつかあります。

  • そのうちの 1 つは、画面に表示されるように を作成しList<String>、単に を作成することです。Strings

  • 有効な「OO」アプローチは、独自のクラスを作成することです。

例えば:

public class Shop{
   private String city;
   private String name;

   public Shop(String city, String name){
       this.city = city;
       this.name = name;
   }

   @Override
   public String toString() {
       return city + " - " + name
   }
}

アダプタList<Shop>では、マップの代わりに a を使用します。メソッドをオーバーライドするtoString()ことで、必要に応じてテキストを操作できます。

  • 言及するだけで、それを行う別の方法は、 ListAdapter クラスを拡張することです
于 2013-04-05T14:02:10.237 に答える