2017-02-16 12 views
0

私は助けが必要です。フラグメント内のListViewを使用して検索

検索バーの機能について問題があります。 検索コードを入力する前に。私のListandSearch.javaはうまくいきます。それは私がやりたかったやり方です。

ListandSearch.java:

public class ListandSearch extends Fragment{ 


    // Search EditText 
    EditText inputSearch; 
    ArrayAdapter<String> listViewAdapter; 
    ListView listview; 


    String[] esttype = { 
      "Art Gallery", //1 
      "ATM", //2 
      "Bakery", //3 
      "Bank", //4 
      "Bar", //5 


}; 


    public ListandSearch(){ 

    } 


    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.activity_list_fragment, container, false); 

     listview = (ListView) view.findViewById(R.id.thislist); 
     inputSearch = (EditText) view.findViewById(R.id.inputSearch); 

     listViewAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1 , esttype); 
     listview.setAdapter(listViewAdapter); 
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       android.app.FragmentManager fragmentManager = getFragmentManager(); 
       switch (position) { 
        case 0: 
         fragmentManager.beginTransaction().replace(R.id.content_frame, new ArtGalleryFragment()).commit(); 
         break; 
        case 1: 
         fragmentManager.beginTransaction().replace(R.id.content_frame, new AtmFragment()).commit(); 
         break; 
        case 2: 
         fragmentManager.beginTransaction().replace(R.id.content_frame, new BakeryFragment()).commit(); 
         break; 
        case 3: 
         fragmentManager.beginTransaction().replace(R.id.content_frame, new BankFragment()).commit(); 
         break; 
        case 4: 
         fragmentManager.beginTransaction().replace(R.id.content_frame, new BarFragment()).commit(); 
         break; 

         default: 
         break; 

       } 
      }}); 
     return view; 
    } 
} 

それから私は、このコードを挿入します。

/************************************************************************************/ 
     inputSearch.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
       // When user changed the Text 
       // getActivity(). 
         listViewAdapter.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 

      } 
     }); 
     /*****************************************************************/ 

これまでのコードが機能しています。それは検索することができます。

問題:(。私は「完全な」という言葉バーを検索し、それがArtGalleryFragmentに行くことがBarFragmentに行く代わりにそれを選択する例#1)

(例#2私は "baを検索します。 "あなたはそれとして、int positionを使用することはできませんそれが表示

。それはBankFragmentに行くとき、私は代わりに銀行を選択すると、それはAtmFragmentに行く。リストのパン屋、銀行、バーだあなたは私を助けることはできますか?

答えて

0

検索結果リスト内の位置であり、完全なリストではありません。

例1:検索結果には1つの要素しかないため、インデックスは0です。それを選択するとcase 0が実行されます。これはArtGalleryFragmentです。

例2:銀行は検索結果リストの2番目の要素で、は、switchの2番目のケース(インデックス1)です。

+0

あなたは何をお勧めしますか? – Problematic

+0

マウスをクリックするのではなく、 'listView'の選択変更でlistenを使うことができます。どの要素が選択されたかがわかります。 –

+0

'listItem'の' selectedItem'や 'selectedIndex'も' onItemClick'で取得する可能性がありますが、タイミングの問題にぶつかるかどうかはわかりません。 –

0

私はあなたがFilterableインターフェイスを実装する必要があると思います。

+0

私はそれに注意します – Problematic

関連する問題