2017-02-16 5 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 

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

Пока код работает. Он может искать.

Проблема: (. Пример # 1 Я ищу "полное" слово Bar и выбрать его вместо этого он будет идти к BarFragment он идет к ArtGalleryFragment)

(Ex # 2 Когда я ищу "ba. "это отобразить их список пекарня, банк, бар. когда я выбираю банк вместо того, чтобы, когда он идет к BankFragment он идет к AtmFragment.

можете ли вы мне помочь?

ответ

0

вы не можете использовать int position, как это это позиция в списке результатов поиска, а не полный список.

Пример 1: в результатах поиска есть только один элемент, поэтому он имеет индекс 0. Выбор его вызывает case 0, который равен ArtGalleryFragment.

Пример 2: «Банк» - это второй элемент в списке результатов поиска, а AtmFragment - это второй случай (индекс 1) в вашем switch.

+0

Итак, что вы можете порекомендовать? – Problematic

+0

Вы можете использовать прослушивание вместо изменения выбора «listView», а не щелчка мыши. Он расскажет вам, какой элемент был выбран. –

+0

Возможно также получить 'listView'' selectedItem' или 'selectedIndex' в' onItemClick', но я не уверен, что вы столкнетесь с проблемами синхронизации. –

0

Я думаю, вам нужно реализовать фильтруемый интерфейс.

+0

, я обращу внимание на это – Problematic