una tiene tiempo tarda recomendable que puede nuevo horas error cuanto cuantas celular cargar carga bateria apps ambientales alcatel android android-layout android-fragments android-spinner android-orientation

android - tiene - ¿Cómo puedo preservar el estado de un elemento giratorio/desplegable seleccionado en el cambio de orientación?



en cuanto tiempo se carga un celular (2)

Estoy usando un menú desplegable de spinner en mi código, en el que tengo de 4 a 5 valores dinámicamente poblados, por ejemplo, si tengo "manzanas" configuradas como predeterminadas y selecciono "naranjas" del menú desplegable y giro la pantalla al paisaje desde el retrato, vuelve a las "manzanas" predeterminadas junto con la vista asociada a él. Cómo guardo el estado de modo que cuando selecciono "naranjas" y gire a horizontal, rellena el valor seleccionado / permanece en el mismo estado seleccionado y mantiene la vista intacta / rellena la vista que se seleccionó en el modo vertical correspondiente al valor seleccionado. Aquí está el código de adaptador que uso para el mismo:

public class MarketsSpinnerAdapter extends CustomRowAdapter<AdapterRow> { private List<AdapterRow> mRenderList; public MarketsSpinnerAdapter(final Context context, final List<AdapterRow> renderList) { super(context); mRenderList = new ArrayList<AdapterRow>(); mRenderList.addAll(renderList); } @Override protected void setEntries(final List<AdapterRow> renderList) { mRenderList = renderList; } @Override protected List<AdapterRow> getEntries() { return mRenderList; } @Override public View getDropDownView(final int position, final View convertView, final ViewGroup parent) { return getEntries().get(position).getDropDownView(mContext, convertView); } }

Uso correspondiente en el fragmento respectivo:

private void populateCategoryRows(final Cursor cursor) { mCategories.clear(); mAllCategories.clear(); cursor.moveToPosition(-1); Map<String, String> categoryParentNames = new HashMap<String, String>(); int selectedPosition = 0; String previousHeader = ""; String previousAllHeader = ""; while (cursor.moveToNext()) { final int categoryLevel = cursor.getInt(cursor.getColumnIndex(MarketsCategory.Columns.LEVEL)); final String categoryName = cursor.getString(cursor.getColumnIndex(MarketsCategory.Columns.NAME)); final String categoryDisplayName = cursor.getString(cursor.getColumnIndex(MarketsCategory.Columns.DISPLAY_NAME)); if (categoryLevel == 1) { categoryParentNames.put(categoryName, categoryDisplayName); } } cursor.moveToPosition(-1); while (cursor.moveToNext()) { final int categoryLevel = cursor.getInt(cursor.getColumnIndex(MarketsCategory.Columns.LEVEL)); final boolean categoryIsDefault = cursor.getInt(cursor.getColumnIndex(MarketsCategory.Columns.IS_DEFAULT)) == 1; final boolean categoryIsSelected = cursor.getInt(cursor.getColumnIndex(MarketsCategory.Columns.IS_SELECTED)) == 1; final String categoryParent = cursor.getString(cursor.getColumnIndex(MarketsCategory.Columns.PARENT)); final String categoryName = cursor.getString(cursor.getColumnIndex(MarketsCategory.Columns.NAME)); final String categoryDisplayName = cursor.getString(cursor.getColumnIndex(MarketsCategory.Columns.DISPLAY_NAME)); if (categoryLevel == 2 ) { String categoryParentDisplayName = categoryParentNames.get(categoryParent); if (!categoryParent.equals(previousHeader)) { if (categoryIsSelected) { mCategories.add(new CategoryHeader(categoryParentDisplayName)); previousHeader = categoryParent; } } if (!categoryParent.equals(previousAllHeader)) { mAllCategories.add(new CategoryHeader(categoryParentDisplayName)); previousAllHeader = categoryParent; } if (categoryIsSelected) { mCategories.add(new SpinnerMarketCategoryRow(categoryName, categoryDisplayName, categoryParent)); } mAllCategories.add(new MarketsCategoryCheckableRow(categoryName, categoryDisplayName, categoryIsSelected, categoryIsDefault)); if(categoryIsDefault){ selectedPosition = mCategories.size()-1; } } } mSpinnerAdapter = new MarketsSpinnerAdapter(Application.getAppContext(), mCategories); headerView.setSpinnerAdapter(mSpinnerAdapter); headerView.setSpinnerSelectedItemPosition(selectedPosition); } if (selectedItem instanceof SpinnerMarketCategoryRow) { selectedCategory = (SpinnerMarketCategoryRow) mSpinnerAdapter.getItem(position); } else { if (mSpinnerAdapter.getCount() - 1 >= position + 1) { selectedCategory = (SpinnerMarketCategoryRow) mSpinnerAdapter.getItem(position + 1); } else { selectedCategory = (SpinnerMarketCategoryRow) mSpinnerAdapter.getItem(position - 1); } } final MarketsFragment parentFragment = (MarketsFragment) getParentFragment(); parentFragment.onCategorySelected(selectedCategory.getCategoryName(), selectedCategory.getCategoryParentName()); } @Override public void showResults(final Uri uri) { LayoutUtils.showResults(getView(), headerView.getSpinnerId()); headerView.setVisibility(View.VISIBLE); } @Override public void showNoResults(final Uri uri) { final MarketsFragment parentFragment = (MarketsFragment) getParentFragment(); parentFragment.hideSpinner(); //LayoutUtils.showNoResult(getView(), headerView.getSpinnerId()); } @Override public void onDismiss(DialogInterface dialog) { headerView.setSelected(false); } @Override public void onNothingSelected(IcsAdapterView<?> parent) { }

¿Algunas ideas?

¡Gracias!


Puedes hacer esto como ...

@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("yourSpinner", yourSpinner.getSelectedItemPosition()); // do this for each or your Spinner // You might consider using Bundle.putStringArray() instead } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // initialize all your visual fields if (savedInstanceState != null) { yourSpinner.setSelection(savedInstanceState.getInt("yourSpinner", 0)); // do this for each of your text views } }

Espero que esto ayude


Si la configuración del dispositivo (según lo definido por la clase Resources.Configuration ) cambia, todo lo que muestre una interfaz de usuario deberá actualizarse para coincidir con esa configuración y su Activity A menos que especifique lo contrario, un cambio de configuración (como un cambio en orientación de la pantalla, idioma, dispositivos de entrada, etc.) hará que se destruya su actividad actual, pasando por el Activity lifecycle process normal del Activity lifecycle process de Activity lifecycle process de onPause (), onStop () y onDestroy () según corresponda.

Si la actividad ha estado en primer plano o es visible para el usuario, una vez que se invoque onDestroy () en esa instancia, se creará una nueva instancia de la actividad, con cualquier instancia de instancia guardada que la instancia previa haya generado desde onSaveInstanceState(Bundle) .

Esto se hace porque cualquier recurso de la aplicación, incluidos los archivos de diseño, puede cambiar en función de cualquier valor de configuración. En algunos casos especiales (al igual que el tuyo, si estoy acertando, si solo tienes un girador / menú desplegable en la interfaz de usuario actual y no necesitas pasar por el ciclo de vida completo de la actividad), es posible que desees evitar reiniciar tu actividad en función de uno o más tipos de cambios de configuración. Esto se hace con el atributo android: configChanges en su manifiesto y / o también puede usar onSaveInstanceState (Bundle) que llama cuando se destruye la actividad y se recrea a partir de la begening.

Simplemente tiene dos formas de resolver este problema_

1_

    1. Agregue android: configChanges = "orientation" en el archivo de Manifiesto de su etiqueta de Actividad.

<?xml version="1.0" encoding="utf-8"?> <manifest ... > <application ... > <activity android:name="SpinnerActivity" android:configChanges="orientation" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

  • 2, Anular onConfigurationChanged , que el sistema llama cuando la configuración del dispositivo cambia mientras se está ejecutando su actividad.

@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); int orientation = newConfig.orientation; switch (orientation) { case Configuration.ORIENTATION_LANDSCAPE: // do what you want when user is in LANDSCAPE break; case Configuration.ORIENTATION_PORTRAIT: // do what you want when user is in PORTRAIT break; } }

2_

Use los métodos put para almacenar valores en onSaveInstanceState ():

protected void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); //Put your spinner values to restore later... savedInstanceState.putLong("yourSpinnerValKey", yourSpinner.getSelectedItemPosition()); }

Y restaurar los valores en onCreate ():

public void onCreate(Bundle savedInstanceState) { if (savedInstanceState!= null) { //get your values to restore... value = savedInstanceState.getLong("param"); } }

Esto seguramente resolverá su problema y no actualizará su ruleta cuando cambie la orientación de la pantalla. ¡Espero que esto te ayude a ti y a todos! :)