SearchView con múltiples fragmentos usando viewpager en android

Quiero implementar SearchView con múltiples fragmentos presentes en un viewPager. Todos los fragemnts contienen listas y quiero filtrar esas listas y crear un nuevo ListView que tiene categorización de resultados basados ​​en el fragmento al que pertenece.

Pero mi searchView no funciona con un solo fragmento.

Aquí está mi actividad principal:

package com.codeon.directory; import android.app.SearchManager; import android.content.Context; import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.SearchView; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuInflater; import android.view.View; import com.codeon.directory.fragments.FiveFragment; import com.codeon.directory.fragments.FourFragment; import com.codeon.directory.fragments.OneFragment; import com.codeon.directory.fragments.SixFragment; import com.codeon.directory.fragments.ThreeFragment; import com.codeon.directory.fragments.TwoFragment; import java.util.ArrayList; import java.util.List; /** * Created by Nikhil Jain on 21-Sep-15. */ public class TabEffect extends AppCompatActivity { private TabLayout tabLayout; private ViewPager viewPager; public String pic[] = {"1","2","3","1","2","3","1","2","3","1","2","3","1","2","3"}; public String state[] = {"A","B","C"}; public String city[] = {"P","Q","R"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tablayout); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); viewPager = (ViewPager) findViewById(R.id.viewpager); setupViewPager(viewPager); tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.setupWithViewPager(viewPager); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.tab, menu); // Associate searchable configuration with the SearchView SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); searchView.setSearchableInfo( searchManager.getSearchableInfo(getComponentName())); return true; } private void setupViewPager(ViewPager viewPager) { ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); Bundle bundle = new Bundle(); bundle.putStringArray("pic", pic); bundle.putStringArray("district", city); bundle.putStringArray("state", state); adapter.addFragment(new OneFragment(), "ONE FRAGMENT", bundle); adapter.addFragment(new TwoFragment(), "TWO FRAGMENT", bundle); adapter.addFragment(new ThreeFragment(), "THREE FRAGMENT", bundle); adapter.addFragment(new FourFragment(), "FOUR FRAGMENT", bundle); adapter.addFragment(new FiveFragment(), "FIVE FRAGMENT", bundle); adapter.addFragment(new SixFragment(), "SIX FRAGMENT", bundle); viewPager.setAdapter(adapter); } class ViewPagerAdapter extends FragmentPagerAdapter { private final List<Fragment> mFragmentList = new ArrayList<>(); private final List<String> mFragmentTitleList = new ArrayList<>(); public ViewPagerAdapter(FragmentManager manager) { super(manager); } @Override public Fragment getItem(int position) { return mFragmentList.get(position); } @Override public int getCount() { return mFragmentList.size(); } public void addFragment(Fragment fragment, String title, Bundle args) { mFragmentList.add(fragment); mFragmentTitleList.add(title); fragment.setArguments(args); } @Override public CharSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } } } 

Este es mi primer fragmento:

 package com.codeon.directory.fragments; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListView; import com.codeon.directory.R; import com.codeon.directory.RecyclerAdapter; import com.codeon.directory.customadapters.Listitems_new; import java.util.ArrayList; /** * Created by Nikhil Jain on 21-Sep-15. */ public class OneFragment extends Fragment { ListView list; private ArrayAdapter<String> listAdapter ; public OneFragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { RecyclerView rootView = (RecyclerView) inflater.inflate(R.layout.fragment_one, container, false); // Inflate the layout for this fragment Bundle extras = getArguments(); String pic[] = extras.getStringArray("pic"); String state[] = extras.getStringArray("state"); Log.e("VALUE",pic[0]+pic[1]+pic[2]); rootView.setLayoutManager(new LinearLayoutManager(rootView.getContext())); //listAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, pic); rootView.setAdapter(new RecyclerAdapter(pic)); return rootView; } } 

Mi SearchActivity:

 package com.codeon.directory; import android.app.Activity; import android.app.SearchManager; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.widget.Toast; /** * Created by Nikhil Jain on 21-Sep-15. */ public class SearchActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search); // Get the intent, verify the action and get the query Intent intent = getIntent(); if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY); doMySearch(query); Log.e("QUERY", query); } } private void doMySearch(String query) { } } 

Este es mi AndroidManifest.xml:

 <activity android:name=".TabEffect" android:label="@string/tablayout" android:theme="@style/AppTheme" > </activity> <activity android:name=".SearchActivity" > <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@layout/searchable"/> </activity> 

Este es mi diseño de búsqueda:

 <?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_name" android:hint="@string/search_hint" android:layout_height="wrap_content" android:layout_width="match_parent"/> 

Por simple, quiero implementar searchView como en WhatsApp.

Introduzca aquí la descripción de la imagen

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.