Wie kann ich bewahren den Zustand einer ausgewählten spinner/dropdown-Element auf die Ausrichtung ändern?
Ich bin mit einem dropdown-spinner in meinem code , bei dem ich noch 4 bis 5 dynamisch aufgefüllt Werte, sagen, wenn ich "äpfel" auf "Standard" gesetzt und ich wählen Sie "Orangen" aus dem dropdown Menü und drehen mein Bildschirm auf Querformat aus hochformat, geht es zurück auf Standard "äpfel" zusammen mit der Ansicht verknüpft.Wie Speichere ich den Zustand so, dass wenn ich wählen Sie "Orangen" und drehen, um die Landschaft, es füllt den ausgewählten Wert/bleibt in der gleichen ausgewählten Zustand und hält den Blick intakt/füllt die Ansicht ausgewählt wurde, in den Porträt-Modus entsprechend dem eingestellten Wert. Hier ist der adapter mit code, den ich verwenden für die gleichen:
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);
}
}
Entsprechende Nutzung in dem jeweiligen fragment:
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) {
}
Irgendwelche Ideen?
Dank!
InformationsquelleAutor Marissa Nicholas | 2013-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dies tun, wie...
Hoffe, das hilft
Diese Lösung vielleicht machen die spinner nennen das OnItemSelected() mehrere Male.
Eine Erklärung sagen, warum die Methode mehrfach aufgerufen wird, wäre hilfreich.
mein spinner ist in fragment ..wie kann ich es nutzen?
InformationsquelleAutor umair.ali
Wenn die Konfiguration des Geräts (definiert durch die Ressourcen.Konfiguration Klasse) ändert, dann nichts anzeigen einer Benutzeroberfläche benötigen, zu aktualisieren, zu entsprechen, die Konfiguration und dadurch Ihre
Activity
Sofern Sie nichts anderes angeben, eine Konfiguration zu ändern (z.B. Wechsel der Bildschirm-Orientierung, der Sprache, Eingabegeräte, etc) bewirkt, dass Ihre aktuelle Tätigkeit zu vernichten, gehen durch die normaleActivity lifecycle process
von onPause(), onStop () und onDestroy() als angemessen.Wenn die Aktivität war in der Vorder-oder der für den Benutzer sichtbar, sobald onDestroy() heißt in diesem Beispiel wird eine neue Instanz der Aktivität erstellt werden, mit dem, was savedInstanceState der vorherigen Instanz erzeugt hatte von
onSaveInstanceState(Bundle)
.Dies ist notwendig, da jede Anwendung Ressource, einschließlich der layout-Dateien, ändern können basierend auf einer Konfiguration Wert. In einigen speziellen Fällen(wie Ihr, wenn ich mich, Recht zu bekommen, wenn Sie nur spinner/dropdown auf aktuelle UI & Sie brauchen sich nicht zu Unterziehen, komplette Aktivität life cycle), möchten Sie vielleicht zu umgehen, Neustart Ihrer Tätigkeit, basierend auf einer oder mehr Arten von änderungen an der Konfiguration. Dies geschieht mit dem android:configChanges - Attribut im manifest und/oder Sie können auch onSaveInstanceState(Bundle) die Anrufer, wenn die activity zerstört wird und neu erzeugt, von der begening.
Müssen Sie einfach zwei Wege zur Behebung dieses problem_
1_
2_
Verwenden Sie die put-Methode zum speichern der Werte in onSaveInstanceState():
Und wiederherstellen der Werte in der onCreate():
Dies wird sicherlich Ihr problem löst und Sie nicht aktualisieren Sie Ihre spinner, wenn die Bildschirm-Orientierung geändert. Ich hoffe, dies wird Ihnen helfen und alle! 🙂
Bitte gehen Sie durch aktualisierte ans.
InformationsquelleAutor Rupesh Yadav