2016-05-14 6 views
1

Zunächst einmal, ich danke Ihnen allen für Ihre (zukünftigen) Antworten :)Gibt es eine Möglichkeit, SearchView in Fragment zu verwenden?

Unten Erklärung meines Problems:

ich meine Hauptaktivität haben MainActivity genannt und ich verwende ein Fragment in seinem Inneren. Also, mein Fragment enthält eine SearchView und eine ListView, die Vorschläge in Abhängigkeit von der Eingabe des Benutzers enthält ... Bitte beachten Sie, dass ich es nicht in der ActionBar, sondern in meiner Layout-Datei ...

Hier ist fragment_board_menu. xml, log xML-Datei auf meinem Fragment BoardMenuFragment:

<android.support.v7.widget.SearchView 
     android:id="@+id/board_searchView" 
     android:layout_marginLeft="3dp" 
     android:layout_marginStart="3dp" 
     android:background="@color/green" 
     app:searchIcon="@drawable/ic_search" 
     app:searchHintIcon="@drawable/ic_search" 
     app:closeIcon="@drawable/ic_close" 
     app:defaultQueryHint="@string/create_newboard_hint" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <ListView 
     android:layout_below="@+id/board_searchView" 
     android:background="@drawable/listview_border" 
     android:layout_marginBottom="@dimen/listview_border_marginBottom" 
     android:layout_marginLeft="3dp" 
     android:layout_marginStart="3dp" 
     android:id="@+id/board_listView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

Er ist BoardMenuFragment.java, Datei mein Fragment java:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_board_menu, container, false); 
    setupSearchView(view); 

    // LISTVIEW 
    // TODO This view is an example, don't forget to delete it 
    values = new ArrayList<>(); 
    values.add("pomme"); 
    values.add("poire"); 
    values.add("banane"); 
    values.add("cerise"); 
    values.add("citron"); 
    adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_expandable_list_item_1, android.R.id.text1, values); 
    board_listView.setAdapter(adapter); 

    return view; 
} 

private void setupSearchView(View view) { 
    SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE); 
    final SearchView searchView = (SearchView) view.findViewById(R.id.searchView); 
    SearchableInfo searchableInfo = searchManager.getSearchableInfo(getActivity().getComponentName()); 
    searchView.setSearchableInfo(searchableInfo); 
} 

Aber ich habe eine Ausnahme, die ist:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.SearchView.setSearchableInfo(android.app.SearchableInfo)' on a null object reference 

Also meine Frage ist: ist es möglich, Suche in Fragment zu verwendenmit Search und SearchableInfo, weil ich es setOnQueryTextListener mit zu tun versucht, und es funktioniert, aber ich denke nicht, dass das der beste Weg ist, es zu tun, weil ich eine Menge Tutorials sah, wo Sie eine DurchsuchbareAktivität erstellen ...

Antwort

0

Ich hatte eine ähnliche Frage und gefunden Die Antwort in this question Sie müssen den Komponentennamen für die SuchableActivity abrufen.

new ComponentName(this, SearchableActivity.class)