2016-03-23 19 views
1

私は、ユーザーが何かを入力したときにデータをフィルタリングするシナリオを持っています。 私はSpinnerを現在使用していますが、ユーザーはスピナー自体にデータを書き込むことができ、実行時にデータがフィルタリングされる必要があります。私は欲しいものに似た何かを見つけることができません。Spinnerのフィルタを追加し、スピナー自体にデータをフィルタリングする

以下の画像と同様のものです(ASP.netで使用されているRadcomboBoxの例です)。

enter image description here

+1

その良く使用する_AutoCompleteTextView_ –

+0

[AutoCompleteTextView]( -

 et_search.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { if(!s.toString().equals("")) { filterlist = new ArrayList<String>(); filterlist= getFilter(s.toString()); CityAdapter adapter = new CityAdapter(getActivity(), R.layout.customlayout, filterlist); listview.setAdapter(adapter); adapter.notifyDataSetChanged(); } else { CityAdapter adapter = new CityAdapter(getActivity(), R.layout.customlayout, Citylist); listview.setAdapter(adapter); adapter.notifyDataSetChanged(); } } }); 

リストビューフィルタ機能は以下の通りであるコードの下に使用しますhttp://developer.android.com/reference/android/widget/AutoCompleteTextView.html) –

+0

AutoCompleteTextViewを使用する方がよいでしょう。 この場合、afterTextChangedListenerを使用して、そのときのテキストを使用して、ドロップダウンにデータを入力するリストからデータをフィルタリングできます。 – Anshul

答えて

4

あなたは、あなたがそのリストビューあたりとしてのEditTextボックスに入力したときEDITTEXTとリストビュー
を使用してデータをrefeshすることを達成することができます。 イニシャルArrayList<String> Citylistの読み込みをCityAdapterに以下のコードのように考えてください。あなたがデータを更新しますのEditTextボックスのリストビューに入力すると

CityAdapter adapter = new CityAdapter(getActivity(), R.layout.customlayout, Citylist); 
listview.setAdapter(adapter); 

-

public ArrayList<String> getFilter(CharSequence charSequence) 
     { 
     ArrayList<String> filterResultsData = new ArrayList<String>();; 
       if(charSequence == null || charSequence.length() == 0) 
        { 
         return null; 
        } 
        else 
        { 


         for(String data : Citylist) 
         { 
          //In this loop, you'll filter through originalData and compare each item to charSequence. 
          //If you find a match, add it to your new ArrayList 
          //I'm not sure how you're going to do comparison, so you'll need to fill out this conditional 
          if(data.toLowerCase().contains(charSequence)) 
          { 
           filterResultsData.add(data); 
          } 
         }    

        } 

        return filterResultsData; 
       } 
+0

私はこのアプローチを考えていましたが、リストビューには多くのデータが含まれていましたが、リストビューには大量のUIスペースが消費されるため、スピナーやその他のアプローチを使用しないようにしました。 –

+0

の代わりに、ユーザーがボタンをクリックすると、EditTextとListviewを含むカスタムレイアウトでカスタムalerDialogを表示できます。 –

+0

さて、私はそれを試してみましょう。 –

関連する問題