1

こんにちは私はリストビューでデータをフィルタリングしています検索付きの編集ボックスが1つあります...

ここで、laと入力して検索ボタンを入力すると、フィルターが実行されます。

以下はコードです

    double lat[] = new double[] { 32.711857, 32.80964, 32.751261, 32.753932, 32.751622, 32.769955, 32.770677, 34.304875, 32.854782, 32.761829 };
double lon[] = new double[] { -117.159901, -117.238223, -117.247137, -117.16355, -117.165782, -117.162005, -117.16561, -118.461662, -117.27464,
        -117.172343 };

double latitude, longitude;

String places[] = new String[] { "Gaslamp", "Pacific Beach", "Ocean Beach", "Uptown", "Hillcrest", "Mission Valley", "Fashion Valley",
        "La Jolla", "San Diego","North Park" };

int zipCode[] = new int[] { 92101, 92109, 92107, 92103, 92103, 92123, 92008, 92037, 92115, 92104 };

SearchImageViewをクリックすると、次のコードが実行されます...

  ImageView imgSearch = (ImageView) findViewById(R.id.ivIconSearch);
    imgSearch.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (adapter != null) {
                adapter.getFilter().filter(edtSearch.getText().toString());
                adapter.notifyDataSetChanged();
            }
            return true;
        }
    });

リストビューをクリックすると、次のコードが実行されます。

    adapter = new SimpleAdapter(PredefinedLocation.this, fillMaps, R.layout.list_item_deal, new String[]{"name"}, new int[]{R.id.name});
    // Adding data into listview
    lv.setAdapter(adapter);
    lv.setTextFilterEnabled(true);
    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {
            // TODO Auto-generated method stu

        }
    });

ここで、フィルタリング可能な緯度、経度、郵便番号を取得できるように、コードを作成する必要があります。

4

3 に答える 3

1

この関数をカスタム アダプターに追加できます。

 @Override public Filter getFilter() {

            Filter myFilter = new Filter() {

                @Override
                protected void publishResults(CharSequence constraint, FilterResults results) {
                    // TODO Auto-generated method stub
                    if (!m_orders.isEmpty()){
                        clear();
                    }

                    for (int i = 0; i < tempList.size(); i++) {
                        if(tempList.get(i).getName().toLowerCase().startsWith(constraint.toString().toLowerCase())){
                            add(tempList.get(i));
                        }
                    }

                    notifyDataSetChanged();
                }

                @Override
                protected FilterResults performFiltering(CharSequence constraint) {
                    // TODO Auto-generated method stub
                    return null;
                }
            };  

            return myFilter;
        }

このフィルター検索を editText にバインドできます。

et_search.addTextChangedListener(new TextWatcher() {

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

                m_adapter.getFilter().filter(s, new FilterListener() {

                    @Override
                    public void onFilterComplete(int count) {
                        // TODO Auto-generated method stub
                        m_adapter.notifyDataSetChanged();
                    }
                });
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                    int arg2, int arg3) {

            }

            @Override
            public void afterTextChanged(Editable str) {

            }
        });

このリンクを使用してください: https://stackoverflow.com/questions/12930403/how-to-search-name-by-searchview/12930564#12930564

于 2012-10-20T11:41:23.400 に答える
0

答えが出ました……。

私はそれが効率的な方法ではないことを知っていますが、私にとっては問題を解決しました

ここでアダプターにアダプターの値を出力すると、以下のような答えが得られました

     System.out.println(adapter);

  I got value like below ....

    "{name=SanDeigo}"


  based on that....


    Intent intent = new Intent(PredefinedLocation.this, MainActivity.class);
            int length = "{name=".length();
            String str = adapter.getItem(position).toString();
            if (str != null)
                if (str.length() > 0)
                    str = str.substring(length, str.length() - 1);

            for (int i = 0; i < places.length; i++) {
                if (places[i].equals(str)) {
                    intent.putExtra("nearLocation", places[i]);
                    //System.out.println("Near Location = " + places[i]);
                    intent.putExtra("latitude", lat[i]);
                    //System.out.println("LATITUDE = " + lat[i]);
                    intent.putExtra("longitude", lon[i]);
                    //System.out.println("LONGITUDE = " + lon[i]);
                    intent.putExtra("zipcode", zipCode[i]);
                    //System.out.println("ZIP CODE = " + zipCode[i]);
                    PredefinedLocation.this.startActivity(intent);
                    break;
                }
            }
于 2012-10-22T05:41:41.850 に答える
0

最善の方法は、Adapter クラスをカスタマイズすることです。データ配列をフィルタリングするメソッドを自分で作成します。その後、フィルタリングされたデータをgetView()メソッドを介してリストビューに入力します

于 2012-10-22T05:56:37.760 に答える