Android Tabhost and SearchView Enfoque problema
-
21-12-2019 - |
Pregunta
Tengo un problema realmente extraño.Tengo un buscapersonas con fragmentos.Uno de los fragmentos es el fragmento de mensajes.En este fragmento tengo un fragmentabhost con tres fragmentos de tabulación.En la barra de acción tengo una vista de búsqueda.Cuando quiero buscar algo y empiezo a escribir la cadena de consulta, el enfoque de la vista de búsqueda se elimina de él y se establece en la primera pestaña del TABHOST.De esa manera no puedo escribir la cadena de consulta.Esto sucede solo cuando estoy cerca de la fragmento de mensajes.Por ejemplo: si estoy lo suficientemente lejos (1 página), la búsqueda está funcionando bien.
¿Puede alguien decirme qué podría ser el problema?
Aquí hay una imagen:
Los mensajes fragmento:
public class MessagesFragment extends Fragment {
private FragmentTabHost tabHost;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
this.tabHost = new FragmentTabHost(this.getActivity());
this.tabHost.setup(this.getActivity(), this.getChildFragmentManager(), container.getId());
TabSpec tabSpecForAllMessages = this.tabHost.newTabSpec("all").setIndicator("ALL");
this.tabHost.addTab(tabSpecForAllMessages, AllMessagesFragment.class, null);
TabSpec tabSpecForSentMessages = this.tabHost.newTabSpec("sent").setIndicator("SENT");
this.tabHost.addTab(tabSpecForSentMessages, SentMessagesFragment.class, null);
TabSpec tabSpecForReceivedMessages = this.tabHost.newTabSpec("received").setIndicator("RECEIVED");
this.tabHost.addTab(tabSpecForReceivedMessages, ReceivedMessagesFragment.class, null);
return this.tabHost;
}
@Override
public void onDestroyView() {
super.onDestroyView();
this.tabHost = null;
}
}
El diseño de la pestaña Host:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
</LinearLayout>
</TabHost>
Los elementos del menú de la barra de acción:
<?xml version="1.0" encoding="utf-8"?>
<item
android:id="@+id/menu_item_search"
android:actionViewClass="android.widget.SearchView"
android:icon="@drawable/ic_action_search"
android:showAsAction="collapseActionView|ifRoom"
android:title="@string/title_search" />
<item
android:id="@+id/menu_item_home"
android:icon="@drawable/ic_action_home"
android:showAsAction="always"
android:title="@string/title_home" />
El manejador de eventos de OnceReEoptionsMenu:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = this.getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.menu_item_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(this
.getComponentName()));
return true;
}
Solución
intente agregar método
@Override
public boolean onQueryTextChange(String text) {
if(searchView!=null)
searchView.requestFocusFromTouch();
return true;
}
Searchview debe ser búsqueda de búsqueda de vista vista;
My OnceReAeoptionsMenu Método:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.only_search, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
searchView.requestFocusFromTouch();
return true;
}
});
}
¡Se ha trabajado para mí!
Otros consejos
También me enfrenté al mismo problema y resolví esto al escribir oyente a la vista como esta ..
searchView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
searchView.requestFocusFromTouch();
return true;
}
});