2017-05-03 4 views
0

Ich habe eine Aktivität und darin habe ich ein lineares Layout (lässt es das "lineare Hauptlayout" nennen) und ich füge dynamisch hinzu erstellte Ansicht darin (Textansichten, lineare Layouts, Texte bearbeiten, ... etc).Wie kann ich ein lineares Layout und alle seine inneren Ansichten speichern und es später verwenden Android

Im unteren Bereich des Bildschirms befinden sich zwei Schaltflächen (neben und zurück).

Wenn der Benutzer auf die nächste Schaltfläche klickte, sollte ich das aktuelle "lineare Hauptlayout" zum Beispiel in einer Liste speichern und dann erzeuge ich eine neue Ansicht und füge sie dann in das "lineare Hauptlayout" ein.

Und wenn der Benutzer auf die Schaltfläche Zurück geklickt habe, sollte ich das "lineare Hauptlayout" wiederherstellen und alle seine Ansichten anzeigen.

Ich weiß nicht, wie ich es tun kann.

Ich hoffe, meine Beschreibung klar ist :)

Antwort

0

Vielen Dank für Ihre Kommentare.

Ich habe nicht Cyrus Antwort testen. Ich werde meine Antwort auch dann posten, wenn jemand das gleiche Problem in Xamarin.Android hat, da ich es benutze.

Ich reparierte es dies wie:

ich dies in Veranstaltung im nächsten Knopf klicken hinzugefügt und vorherige Schaltfläche klicken Ereignis:

AddQuestionsLinearLayoutToPagesLinearLayoutsList(); 

Und die AddQuestionsLinearLayoutToPagesLinearLayoutsList() Körper ist, natürlich kann man es ändern, um das wie Sie wollen:

private void AddQuestionsLinearLayoutToPagesLinearLayoutsList() 
    { 
     //Create a new linear layout to add views into it and saved it in _mPagesLinearLayouts list at index _mPageIndex 
     LinearLayout savedLinearLayout = new LinearLayout(this); 

     //List of _mQuestionsLinearLayout views 
     List<View> views = new List<View>(); 

     //Add all _mQuestionsLinearLayout to views list 
     for (int i = 0; i < _mQuestionsLinearLayout.ChildCount; i++) 
     { 
      views.Add(_mQuestionsLinearLayout.GetChildAt(i)); 
     } 

     //Remove views from main questions linear layout 
     _mQuestionsLinearLayout.RemoveAllViews(); 

     //Add all views from the views list to savedLinearLayout 
     for (int i = 0; i < views.Count; i++) 
     { 
      savedLinearLayout.AddView(views[i]); 
     } 

     //Add savedLinearLayout to _mPagesLinearLayouts list at index _mPageIndex 
     _mPagesLinearLayouts.Insert(_mPageIndex, savedLinearLayout); 
    } 

Bei der Erstellung Ansichten Methode:

if(NeedToCreateViews()) 
    { 
//create views here and add it to _mQuestionsLinearLayout 
} 
//Get all saved views and add it to _mQuestionsLinearLayout 
else 
      { 
       //List of _mPagesLinearLayouts[_mPageIndex] LinearLayout views 
       List<View> views = new List<View>(); 

       //Add all _mPagesLinearLayouts[_mPageIndex] LinearLayout to views list 
       for (int i = 0; i < _mPagesLinearLayouts[_mPageIndex].ChildCount; i++) 
       { 
        views.Add(_mPagesLinearLayouts[_mPageIndex].GetChildAt(i));    
       } 

       //Remove all views from _mPagesLinearLayouts[_mPageIndex] linear layout 
       _mPagesLinearLayouts[_mPageIndex].RemoveAllViews(); 

       //Remove the linear layout at index _mPageIndex 
       _mPagesLinearLayouts.RemoveAt(_mPageIndex); 

       //Add all views from views list to _mQuestionsLinearLayout 
       for (int i = 0; i < views.Count; i++) 
       { 
        _mQuestionsLinearLayout.AddView(views[i]); 
       } 

      } 
0

Werfen Sie einen Blick auf onSaveInstance für die Ansicht auf dem Hauptbildschirm zu bewahren, wenn auf eine andere Aktivität oder Bildschirmausrichtung zu verlassen.

Sie können auch versuchen, die Schaltflächen zu verwenden, um die Layouts mithilfe von Sichtbarkeit auszublenden, anstatt zu versuchen, durch sie zu navigieren.

+0

Ich habe meine Frage bearbeiten, ich habe eine Aktivität und ich verwende das gleiche lineare Layout. Würde onSaveInstance mir in diesem Fall helfen? –

+0

Das Speichern von Daten in onSaveInstanceState und das erneute Abrufen dieser Daten onRestoreInstanceState kommt nur dann in ein Bild, wenn die Aktivität (die die Daten speichert) aufgrund von Konfigurationsänderungen oder in Situationen mit wenig Arbeitsspeicher zerstört wird. Ist das was du brauchst? – Pavan

+0

Ich denke, dass Sie Fragmente mit einer FragmentTransaction untersuchen möchten, um der ursprünglichen Ansicht (next) oder pop (back) hinzuzufügen. Werfen Sie einen Blick auf diese Antwort: http://stackoverflow.com/questions/14347588/show-hide-fragment-in-android – Jeremy

0

Dies kann Ihnen helfen. aber konkreter Code muss man selbst schreiben.

public class TestActivity extends Activity{ 
    Stack<LinearLayout> layouts = new Stack<>(); 
    FrameLayout container; 
    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Button btnPre = new Button(this); 
     Button btnNext = new Button(this); 
     btnPre.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       container.addView(layouts.pop()); 
      } 
     }); 
     btnNext.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       LinearLayout linearLayout = (LinearLayout) container.getChildAt(0); 
       layouts.push(linearLayout); 
       container.removeAllViews(); 
       container.addView(createNextView()); 
      } 
     }); 
    } 
    private LinearLayout createNextView(){ 
     LinearLayout linearLayout = new LinearLayout(this); 
     return linearLayout; 
    } 
} 
Verwandte Themen