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

  • Android - vista de búsqueda con función completa automática dentro de la barra de acción
  • ¿Cómo manejar el evento de clic de sugerencia con SearchView en ActionBar, ContentProvider llamando a webService, devolviendo el cursor?
  • MenuItemCompat.setOnActionExpandListener no hace nada
  • Cómo restablecer listview después de searchview se cierra en android?
  • Cómo corregir el corte personalizado de fondo SearchView en el paisaje?
  • El reemplazo de fragmentos activa onQueryTextChange en la vista de búsqueda
  • Problemas de procesamiento No se pudo resolver resource @ id / search_edit_frame
  • Puntero nulo en ExpandedView para la búsqueda de ActionBar
  • SearchView no filtrar en cada niño Tab de TabLayout
  • Excepción de puntero nulo al utilizar SearchView con AppCompat
  • Mostrar icono de micrófono en SearchView siempre
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.