Dos SearchViews en una actividad y rotación de pantalla
Tengo dos SearchViews en una disposición del xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <SearchView android:id="@+id/my_first_custom_view" android:layout_width="wrap_content" android:layout_height="wrap_content" > </SearchView> <SearchView android:id="@+id/my_second_custom_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/my_first_custom_view" > </SearchView> </RelativeLayout>
Y hincho este diseño a mi MainActivity por setContentView (). Entonces llamo a los métodos setQuery () uno para el otro.
- Configuración de RelativeLayout en código java
- DefaultHttpClient o HttpURLConnection en Android
- ¿Puedo hacer referencia al botón de OnClickListener desde dentro del listener? (androide)
- ¿Cómo implementar arrastrar y soltar entre listas en android?
- ¿Cuál es la diferencia entre .string () y .toString () para OkHttp?
Todo está bien hasta una rotación de pantalla. Cuando giro la pantalla cada searchView tiene texto "World" en lugar de "Hello" y "World".
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SearchView firstSearchView = (SearchView) findViewById(R.id.my_first_custom_view); SearchView secondSearchView = (SearchView) findViewById(R.id.my_second_custom_view); firstSearchView.setQuery("Hello!", false); secondSearchView.setQuery("World", false); } }
Alguien puede explicar lo que está pasando mal?
- ¿Cómo obtener la vista de contenido actual en la programación de Android?
- ListView in Scroll Ver mi vista de desplazamiento se mueve a la parte superior de listview. ¿Cómo puedo evitar esto?
- Serialización y subclases
- ¿Hay una manera más fácil de analizar XML en Java?
- Cambiar el tamaño de una casilla de verificación en android
- ¿Es la forma recomendada de dar formato a los números en una forma regional?
- Cómo configurar el color de fondo TabHost
- Alinear el centro de texto con android
El SearchView
utiliza como su contenido la vista resultante de inflar un archivo de diseño. Como resultado, todas las SearchViews
usadas en el diseño de una actividad (como su caso) tendrán como contenido, vistas con los mismos ids. Cuando Android intente guardar el estado para manejar el cambio de configuración verá que los EditTexts
de las SearchViews
tienen el mismo id y restaurará el mismo estado para todos ellos.
La forma más sencilla de manejar este problema es usar el onSaveInstanceState
la onSaveInstanceState
y onRestoreInstanceState
como este:
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // state for the first SearchView outState.putString("sv1", firstSearchView.getQuery().toString()); // state for the second SearchView outState.putString("sv2", secondSearchView.getQuery().toString()); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); // properly set the state to balance Android's own restore mechanism firstSearchView.setQuery(savedInstanceState.getString("sv1"), false); secondSearchView.setQuery(savedInstanceState.getString("sv2"), false); }
También echa un vistazo a esta cuestión relacionada .
Una forma de aliviar este problema es capturar el cambio de evento de orientación con su actividad y, a continuación, establecer la consulta de nuevo en sus dos vistas de búsqueda.
Agregue esto para manifestar en la actividad en la que tiene dos SearchView
android:configChanges="keyboardHidden|orientation|screenSize"