Kennt jemand ein Tutorial oder ein Beispiel für die Implementierung der Standard Android-Suchoberfläche mit Fragment
s? Ist es mit anderen Worten möglich, eine Standardsuche mit einer SearchManager
in ein Fragment einzufügen?
Kurz gesagt, das kannst du nicht. Es gibt mehrere Gründe, warum das Erstellen einer Suchoberfläche in einem Fragment
nicht möglich ist.
Beim Erstellen einer durchsuchbaren Oberfläche müssen Sie in Ihrem Android Manifest eine standardmäßige "durchsuchbare Aktivität" angeben. Wie Sie sicher wissen, kann ein Fragment
nicht ohne einen übergeordneten Activity
existieren, und daher ist diese Trennung nicht möglich.
Wenn Sie bereits die Nummer 1 herausgefunden haben, gehen wir davon aus, dass Sie diese Frage in der Hoffnung gestellt haben, dass es da draußen einen magischen "Hack" gibt, der die Arbeit erledigen kann. Die Dokumentation besagt jedoch, dass
Wenn der Benutzer eine Suche im Suchdialog oder Widget ausführt, startet das System Ihre durchsuchbare Aktivität und liefert die Suchabfrage in einem Intent mit der Aktion ACTION_SEARCH. Ihre durchsuchbare Aktivität ruft die Abfrage aus dem Zusatz QUERY der Absicht ab, durchsucht dann Ihre Daten und zeigt die Ergebnisse an.
Das zugrunde liegende interne System, das für die Bereitstellung der Suchergebnisse verantwortlich ist, erwartet einen Activity
und keinen Fragment
name__. Daher ist es nicht möglich, eine Suchschnittstelle zu implementieren, die völlig unabhängig von Activity
ist, da dies Änderungen am zugrunde liegenden System selbst erforderlich machen würde . Schauen Sie sich den Quellcode für die Klasse SearchableInfo
NAME _ an, wenn Sie mir nicht glauben :).
Abgesehen davon scheint es nicht allzu schwierig zu sein, etwas Ähnliches wie das zu erreichen, was Sie beschreiben. Sie könnten beispielsweise in Betracht ziehen, Ihre durchsuchbare Aktivität so zu implementieren, dass sie die Absicht Android.intent.action.SEARCH
akzeptiert und (anstatt die Ergebnisse sofort in einem ListView
anzuzeigen) die Suchabfrage an Ihren Fragment
name__s weiterleitet. Betrachten Sie beispielsweise die folgende durchsuchbare Aktivität:
public class SearchableActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Intent.ACTION_SEARCH.equals(getIntent().getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
doMySearch(query);
}
}
/**
* Performs a search and passes the results to the container
* Activity that holds your Fragments.
*/
public void doMySearch(String query) {
// TODO: implement this
}
}
Wenn eine Suchanfrage gestellt wird, startet das System Ihre durchsuchbare Aktivität, führt die Abfrage durch und übergibt die Ergebnisse an eine Containeraktivität (basierend auf Ihrer Implementierung von doMySearch
name__). Der Container Activity übergibt diese Ergebnisse dann an das enthaltene durchsuchbare Fragment
name__, in dem die Ergebnisse angezeigt werden. Die Implementierung erfordert etwas mehr Arbeit als Sie sich wahrscheinlich erhofft hatten, aber ich bin sicher, dass es Möglichkeiten gibt, sie modularer zu gestalten, und es scheint, als wäre dies das Beste, was Sie tun können.
p.s. Wenn Sie diesen Ansatz verwenden, müssen Sie möglicherweise besonders darauf achten, welche Aktivitäten dem Backstack hinzugefügt/daraus entfernt werden. Siehe this post für weitere Informationen darüber, wie dies gemacht werden könnte.
p.p.s. Sie können auch die Standard-Suchoberfläche komplett vergessen und einfach eine einfache Suche in einem Fragment
implementieren, wie in Raghavs Post unten beschrieben .
Hier ist das Beispiel, um etwas mit Fragmenten zu suchen. Hoffe es hilft und das ist, was Sie suchen:
public class LoaderCursor extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentManager fm = getFragmentManager();
// Create the list fragment and add it as our sole content.
if (fm.findFragmentById(Android.R.id.content) == null) {
CursorLoaderListFragment list = new CursorLoaderListFragment();
fm.beginTransaction().add(Android.R.id.content, list).commit();
}
}
public static class CursorLoaderListFragment extends ListFragment
implements OnQueryTextListener, LoaderManager.LoaderCallbacks<Cursor> {
// This is the Adapter being used to display the list's data.
SimpleCursorAdapter mAdapter;
// If non-null, this is the current filter the user has provided.
String mCurFilter;
@Override public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Give some text to display if there is no data. In a real
// application this would come from a resource.
setEmptyText("No phone numbers");
// We have a menu item to show in action bar.
setHasOptionsMenu(true);
// Create an empty adapter we will use to display the loaded data.
mAdapter = new SimpleCursorAdapter(getActivity(),
Android.R.layout.simple_list_item_2, null,
new String[] { Contacts.DISPLAY_NAME, Contacts.CONTACT_STATUS },
new int[] { Android.R.id.text1, Android.R.id.text2 }, 0);
setListAdapter(mAdapter);
// Start out with a progress indicator.
setListShown(false);
// Prepare the loader. Either re-connect with an existing one,
// or start a new one.
getLoaderManager().initLoader(0, null, this);
}
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Place an action bar item for searching.
MenuItem item = menu.add("Search");
item.setIcon(Android.R.drawable.ic_menu_search);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
SearchView sv = new SearchView(getActivity());
sv.setOnQueryTextListener(this);
item.setActionView(sv);
}
public boolean onQueryTextChange(String newText) {
// Called when the action bar search text has changed. Update
// the search filter, and restart the loader to do a new query
// with this filter.
mCurFilter = !TextUtils.isEmpty(newText) ? newText : null;
getLoaderManager().restartLoader(0, null, this);
return true;
}
@Override public boolean onQueryTextSubmit(String query) {
// Don't care about this.
return true;
}
@Override public void onListItemClick(ListView l, View v, int position, long id) {
// Insert desired behavior here.
Log.i("FragmentComplexList", "Item clicked: " + id);
}
// These are the Contacts rows that we will retrieve.
static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
Contacts._ID,
Contacts.DISPLAY_NAME,
Contacts.CONTACT_STATUS,
Contacts.CONTACT_PRESENCE,
Contacts.PHOTO_ID,
Contacts.LOOKUP_KEY,
};
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
// This is called when a new Loader needs to be created. This
// sample only has one Loader, so we don't care about the ID.
// First, pick the base URI to use depending on whether we are
// currently filtering.
Uri baseUri;
if (mCurFilter != null) {
baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,
Uri.encode(mCurFilter));
} else {
baseUri = Contacts.CONTENT_URI;
}
// Now create and return a CursorLoader that will take care of
// creating a Cursor for the data being displayed.
String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
+ Contacts.HAS_PHONE_NUMBER + "=1) AND ("
+ Contacts.DISPLAY_NAME + " != '' ))";
return new CursorLoader(getActivity(), baseUri,
CONTACTS_SUMMARY_PROJECTION, select, null,
Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
}
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
// Swap the new cursor in. (The framework will take care of closing the
// old cursor once we return.)
mAdapter.swapCursor(data);
// The list should now be shown.
if (isResumed()) {
setListShown(true);
} else {
setListShownNoAnimation(true);
}
}
public void onLoaderReset(Loader<Cursor> loader) {
// This is called when the last Cursor provided to onLoadFinished()
// above is about to be closed. We need to make sure we are no
// longer using it.
mAdapter.swapCursor(null);
}
}
}
Es ist durchaus möglich, ein Fragment mit der ActionView-ActionView-API von ActionBar zu suchen. Dies funktioniert auch auf Android 2.1 (API-Ebene 7) mit den AppCompat-Supportklassen v7.
In deinem Fragment:
@Override
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater){
inflater.inflate(R.menu.search, menu);
MenuItem item = menu.findItem(R.id.action_search);
SearchView sv = new SearchView(((YourActivity) getActivity()).getSupportActionBar().getThemedContext());
MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItemCompat.SHOW_AS_ACTION_IF_ROOM);
MenuItemCompat.setActionView(item, sv);
sv.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
System.out.println("search query submit");
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
System.out.println("tap");
return false;
}
});
}
In Ihrem Menü XML
<item
Android:id="@+id/action_search"
Android:icon="@drawable/ic_action_search"
Android:title="Search Waste Items"
Android:showAsAction="ifRoom|collapseActionView"
nz.govt.app:actionViewClass="Android.support.v7.widget.SearchView"
nz.govt.app:showAsAction="ifRoom|collapseActionView" />
AppCompat-Unterstützungsklassen v7 verwenden. Hinzufügen von etwas zu @David 's Lösung von @Rookie lösung, damit es auf einfache Weise richtig funktioniert, hier ist mein Fragment-Code:
MyFragment :
public class MyFragment extends Fragment implements SearchView.OnQueryTextListener {
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// What i have added is this
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {
//inflater.inflate(R.menu.main, menu); // removed to not double the menu items
MenuItem item = menu.findItem(R.id.action_search);
SearchView sv = new SearchView(((MainActivity) getActivity()).getSupportActionBar().getThemedContext());
MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItemCompat.SHOW_AS_ACTION_IF_ROOM);
MenuItemCompat.setActionView(item, sv);
sv.setOnQueryTextListener(this);
sv.setIconifiedByDefault(false);
sv.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Utils.LogDebug("Clicked: ");
}
});
MenuItemCompat.setOnActionExpandListener(item, new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// Do something when collapsed
Utils.LogDebug("Closed: ");
return true; // Return true to collapse action view
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// Do something when expanded
Utils.LogDebug("Openeed: ");
return true; // Return true to expand action view
}
});
super.onCreateOptionsMenu(menu,inflater);
}
@Override
public boolean onQueryTextSubmit(String query) {
Utils.LogDebug("Submitted: "+query);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
Utils.LogDebug("Changed: "+newText);
return false;
}
}
Ich habe onActivityCreated
, cuz hinzugefügt, ohne setHasOptionsMenu(true);
aufzurufen. Das System weiß nicht, dass dieses Fragment mit dem Menü interagieren muss.
dann entfernte ich die Zeile inflater.inflate(R.menu.main, menu);
, weil dadurch die Menüpunkte verdoppelt wurden, da Activity ein Menü aufgeblasen hatte, und Fragment ein anderes Menü
Danke an @David und @Rookie
Wenn Sie mit Fragments
arbeiten, müssen Sie weiterhin Activity
verwenden, um Fragments
..__ zu steuern und zuzuweisen. Diese Activity
kann wie zuvor über die Suchfunktion verfügen.
Ich habe kürzlich von einer "normalen" Activity
-basierten App zu einer Fragment
-basierten App gewechselt, und die Suchfunktion funktionierte für mich genauso.
Haben Sie versucht, daran zu arbeiten, und es ist Ihnen nicht gelungen? Wenn ja, geben Sie in Ihrer Frage etwas genaueres an.
BEARBEITEN:
Wenn Sie eine fragmentspezifische Suche durchführen möchten, erweitern Sie alle Ihre Fragments
-Schnittstelle um eine MyFragment
-Schnittstelle mit einer startSearch
-Methode, und rufen Sie die Activity
-Methode der startSearch
-Methode der startSearch
-Methode auf.
Ich glaube, ich habe es geschafft: Sie können tatsächlich Fragmente verwenden und einer Aktionsleiste ein Suchsymbol hinzufügen, sodass eine Suche innerhalb der Fragmente möglich ist. Der Trick besteht darin, eine Aktionsleiste, eine Aktionsansicht, einen Listener, einen Loader und natürlich einen Adapter zu verwenden.
Dies funktioniert ziemlich gut, obwohl es den Android-Plattform-Suchmechanismus vollständig umgeht (es könnte jedoch mit einigen Arbeiten abgeschlossen werden, um herauszufinden, was @Alex Lockwood beschreibt und die Suche an Fragmente weitergibt). Es würde nicht wie erwartet auf eine Absicht im Falle einer Aktivität reagieren, aber es funktioniert: Benutzer können innerhalb von Fragmenten suchen.
Hier ist der Code:
SearchInFragmentActivity
package com.sof.test.searchfragment;
import Android.os.Bundle;
import Android.support.v4.app.Fragment;
import Android.support.v4.app.FragmentTransaction;
import Android.view.View;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.ActionBar.TabListener;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.sof.test.searchfragment.SearchFragment;
import com.sof.test.R;
public class SearchInFragmentActivity extends SherlockFragmentActivity implements TabListener {
private SearchFragment tab1 = new SearchFragment();
private SearchFragment tab2 = new SearchFragment();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView( R.layout.search_in_fragments );
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
createTab( R.string.tab1, R.drawable.ic_menu_search );
createTab( R.string.tab2, R.drawable.ic_menu_search );
getSupportActionBar().setSelectedNavigationItem( 0 );
invalidateOptionsMenu();
}
private void createTab(int tabNameResId, int tabIconResId) {
ActionBar.Tab tab = getSupportActionBar().newTab();
tab.setText( tabNameResId );
tab.setTabListener(this);
getSupportActionBar().addTab(tab);
}// met
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if( ft == null ) {
return;
}//if
View fragmentSlot = findViewById( R.id.fragment );
Fragment newFragment = null;
if( fragmentSlot != null ) {
newFragment = (tab.getPosition() == 0) ? tab1 : tab2;
ft.replace(R.id.fragment, newFragment );
ft.setTransition( FragmentTransaction.TRANSIT_FRAGMENT_FADE);
}//if
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
}//class
Die Fragmentklasse SearchFragment (Ich verwende zwei Instanzen in der obigen Aktivität).
package com.sof.test.searchfragment;
import Java.util.ArrayList;
import Java.util.List;
import Android.content.Context;
import Android.os.Bundle;
import Android.support.v4.app.LoaderManager.LoaderCallbacks;
import Android.support.v4.content.AsyncTaskLoader;
import Android.support.v4.content.Loader;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.ArrayAdapter;
import Android.widget.SearchView;
import Android.widget.TextView;
import com.sof.test.R;
import com.actionbarsherlock.app.SherlockListFragment;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
public class SearchFragment extends SherlockListFragment {
private StringLoader loader = null;
private StringAdapter adapter = null;
private List<String> listData = new ArrayList<String>();
private String query;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
createListData();
loader = new StringLoader( getActivity(), this );
adapter = new StringAdapter(listData);
setListAdapter(adapter);
getLoaderManager().initLoader(0, null, new LoaderCallBacks() );
loader.forceLoad();
setHasOptionsMenu( true );
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater ) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate( R.menu.menu_search, menu);
System.out.println( "inflating menu");
final SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
showFilteredItems( newText );
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
return true;
}
};
searchView.setOnQueryTextListener(queryTextListener);
return;
}//met
private void showFilteredItems( String query ) {
this.query = query;
loader.onContentChanged();
}
private void createListData() {
for( int i = 0; i < 100 ; i ++ ) {
listData.add( "String "+ i );
}
}
public List<String> getData() {
List<String> listFilteredData = new ArrayList<String>();
for( String string : listData ) {
if( query == null || string.contains( query ) ) {
listFilteredData.add( string );
}
}
return listFilteredData;
}//met
private class LoaderCallBacks implements LoaderCallbacks< List<String>> {
@Override
public void onLoadFinished(Loader<List<String>> loader,
List<String> listData) {
adapter.setListData( listData );
}// met
@Override
public void onLoaderReset(Loader<List<String>> listData) {
adapter.setListData( new ArrayList<String>() );
}// met
@Override
public Loader<List<String>> onCreateLoader(int arg0,
Bundle arg1) {
return loader;
}// met
}//class
private class StringAdapter extends ArrayAdapter< String > {
private List<String> listDataToDisplay = new ArrayList<String>();
private LayoutInflater mInflater;
public StringAdapter( List<String> listData ) {
super( getActivity(), Android.R.layout.simple_list_item_1, Android.R.id.text1, listData );
listDataToDisplay = listData;
mInflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}//cons
private void setListData( List<String> newListData ) {
this.listDataToDisplay.clear();
this.listDataToDisplay.addAll( newListData );
notifyDataSetChanged();
}//met
/**
* Populate new items in the list.
*/
@Override public View getView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView == null) {
view = mInflater.inflate(Android.R.layout.simple_list_item_1, parent, false);
} else {
view = convertView;
}
((TextView)view.findViewById( Android.R.id.text1)).setText( listDataToDisplay.get( position ) );
return view;
}
}//inner class
}//class
class StringLoader extends AsyncTaskLoader<List<String>> {
SearchFragment fragment = null;
public StringLoader(Context context, SearchFragment fragment) {
super(context);
this.fragment = fragment;
}// cons
@Override
public List<String> loadInBackground() {
return fragment.getData();
}// met
}// class
Die XML-Datei für das Menü der Suchfragmente res/menu/menu_search.xml:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:baselineAligned="false"
Android:orientation="horizontal" >
<FrameLayout
Android:id="@+id/fragment"
Android:layout_width="0px"
Android:layout_height="match_parent"
Android:layout_weight="1" />
</LinearLayout>
Und die XML-Layoutdatei res/layout/search_in_fragments.xml
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:baselineAligned="false"
Android:orientation="horizontal" >
<FrameLayout
Android:id="@+id/fragment"
Android:layout_width="0px"
Android:layout_height="match_parent"
Android:layout_weight="1" />
</LinearLayout>
Verwenden Sie die ActionBar
und SearchView
. Sie können Suchvorgänge ohne Verbindung zu Activity durchführen. Setzen Sie einfach eine OnQueryTextListener
auf die SearchView.
MenuItem item = menu.add("Search");
SearchView sv = new SearchView(getActionBar().getThemedContext());
item.setActionView(sv);
item.setIcon(R.drawable.ic_search);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
| MenuItem.SHOW_AS_ACTION_IF_ROOM);
sv.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
//...
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
//...
return false;
}
});
Unter this post finden Sie weitere Details zur benutzerdefinierten Suche.
ich habe eine Arbeit gefunden:) Sie können diese Methode (StartActivity (Intent)) in Ihrer BaseActivity überschreiben und dann überprüfen, ob die Aktion ACTION_SEARCH ist
@Override
public void startActivity(Intent intent) {
try {
if (intent.getAction().equals(Intent.ACTION_SEARCH))
toast("hello");
} catch (Exception e) {
}
}
Ein Fragment
kann nicht außerhalb eines Activity
existieren, und ein Fragment
kann nicht mit einem Android.intent.action.SEARCH
oder einem anderen intent-filter
verknüpft sein.
Ohne Activity
zum Umwickeln von Fragment
ist das, was Sie fragen, nicht möglich.
andere Lösung ..... Ich mag das nicht ... __Das ist für mich leichter
public interface SearchImpl {
public void searchQuery(String val);
}
Fragment
public class MyFragment extends Fragment implements SearchImpl {
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_almanca, container, false);
return view;
}
@Override
public void searchQuery(String val) {
Log.e("getted", val);
}
}
Aktivität
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
Log.e("setted", "" + query);
try {
MyFragment myFGM=new MyFragment();
myFGM.searchQuery(query);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
Bei Fragmenten in einem ViewPager kann ich dies tun, indem ich die Suchschaltfläche blockiere, wenn ich mich nicht an dem Fragment befinde, an dem ich eine Suchleiste angeben möchte. In die Aktivität:
@Override
public boolean onSearchRequested() {
if (mPager.getCurrentItem() == mAdapter.getPosition(FragmentType.VIDEO))
return super.onSearchRequested();
else
return false;
}
Falls keine Schaltfläche für die physische Suche vorhanden ist, habe ich dem Fragment ein Aktionselement hinzugefügt, das diesen Code auslöst:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.search_item) {
return getSherlockActivity().onSearchRequested();
}
return super.onOptionsItemSelected(item);
}
ja es ist möglich,
bitte implementieren Sie die Suchansicht in Ihrer Aktivität, 'onQueryTextChange' in Activity hört auch die Suche in Fragmenten an. Sie können die Sichtbarkeit der Fragmente in 'onQueryTextChange' überprüfen. Wenn sie sichtbar ist, können Sie Ihre Suchmethode für fragment aufrufen