2017-02-16 11 views
0

Ich brauche Hilfe.Suche mit ListView in einem Fragment

Ich habe Probleme mit der Funktion meiner Suchleiste. Bevor Sie den Suchcode eingeben. Meine ListandSearch.java funktioniert gut. Es ist die Art und Weise, wie ich es machen wollte.

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; 
    } 
} 

Dann füge ich diesen Code:

/************************************************************************************/ 
     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 

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

Bisher ist der Code funktioniert. Es kann suchen.

Das Problem: (Bsp. # 1 ich das "complete" Wort Bar suchen und es auswählen, anstatt es in den BarFragment gehen wird es das ArtGalleryFragment geht)

(Ex # 2 Als ich "ba suchen. "es angezeigt ist die Liste Bäckerei, Bank, Bar. wenn ich stattdessen Songbank- wenn es um die BankFragment geht geht es zum AtmFragment.

können Sie mir helfen?

Antwort

0

Sie nicht int position verwenden können, wie es ist die Position in Ihrer Suchergebnisliste, nicht die vollständige Liste

Beispiel 1: Es gibt nur ein Element in Ihrem Suchergebnis, also hat es den Index 0. Die Auswahl bewirkt, dass case 0 ausgeführt wird, also ArtGalleryFragment.

Beispiel 2: "Bank" ist das zweite Element in der Suchergebnisliste und AtmFragment ist der zweite Fall (Index 1) in Ihrem switch.

+0

Also, was können Sie empfehlen? – Problematic

+0

Sie können hören auf die Auswahl der 'listView's statt Mausklick. Es wird Ihnen sagen, welches Element ausgewählt wurde. –

+0

Möglicherweise erhalten Sie auch 'listView's' selectedItem' oder 'selectedIndex' in' onItemClick', aber ich bin mir nicht sicher, ob Sie auf Timing-Probleme stoßen werden. –

0

Ich denke, Sie müssen filterbare Schnittstelle zu implementieren.

+0

Ich nehme das zur Kenntnis – Problematic

Verwandte Themen