Umschalten zwischen 2 layouts in android-Aktivität
Ich habe 2 verschiedene layout-Dateien, die ich verwenden möchten, für das ändern die gleichen Daten, ich war zu wechseln, um mein layout für die "Bearbeiten-Ansicht" ermöglicht es dem Benutzer zu ändern graph-Daten und dann können Sie zu einem Wechsel zurück zu einer "Detailansicht" zeigt ein detailliertes Diagramm(mit androidplot-Bibliothek).
Mein Problem ist, beim Wechsel zurück zu meinem "Bearbeiten-Ansicht" meine dargestellten Linien sind verschwunden und nur die Achsen zeichnen(also das layout wechselt und die onDraw() aufgerufen wird, ist für meine Darstellung als graph). Alles ist gespeichert, innerhalb der selben Aktivität, so verstehe ich nicht, warum funktioniert das nicht?
Den Zeilen gespeichert werden, innerhalb der Darstellung als Graph-Objekt selbst, das persistent sein soll, da es eine gespeicherte variable in meine Tätigkeit.
Verwende ich diese beiden Methoden für die switching-layout-Dateien auf eine Schaltfläche klicken.
public class GraphLibActivity extends Activity {
private Graph graph;
private boolean editView;
private static TextView coordTextView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
editView = true;
setContentView(R.layout.graphlib);
graph = (Graph) findViewById(R.id.graph);
coordTextView = (TextView)findViewById(R.id.currentCoords);
(lots of calculations)
graph.addLine(gelHistogramPoints, linePaint);
graph.invalidate();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
if(editView == true){
inflater.inflate(R.menu.activity_menu, menu);
}else{
inflater.inflate(R.menu.detailed_view_menu, menu);
}
return true;
}
public boolean onPrepareOptionsMenu(Menu menu){
menu.clear();
MenuInflater inflater = getMenuInflater();
if(editView == true){
inflater.inflate(R.menu.activity_menu, menu);
}else{
inflater.inflate(R.menu.detailed_view_menu, menu);
}
graph.invalidate();
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//Handle item selection
switch (item.getItemId()) {
case R.id.detailed_view:
editView = false;
setContentView(R.layout.imagegraph);
return true;
case R.id.edit_view:
editView = true;
setContentView(R.layout.editgraph);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jedem Aufruf von setContentView Sie sind das aufblasen, das layout, so müssen die Daten wieder gesetzt. Tun Sie das?
Sowieso, ich würde empfehlen eine Zusammenlegung der beiden layouts in einer Datei. Dann nutzen Sie ViewFlipper Wechsel von einem layout zu einem anderen. Das wäre doch etwas ähnliches wie:
graph.xml:
Dann sind Sie nur noch zu nennen
showNext()
um layouts wechseln Sie in Ihrer Tätigkeit:Hoffe, es hilft.
next
oder diefirst
Ansicht verwenden:vf.setDisplayedChild(vf.indexOfChild(vfChildView))
Warum sind Sie immer aufblasen des layout? Das ist wirklich teuer. Versuchen Sie, verwenden Sie die Seriendruck-layout. Auf diese Weise können Sie ändern Sie die Anzeigeeigenschaften an "Gone" oder "Sichtbar".
sehen Sie mehr : http://android-developers.blogspot.com/2009/03/android-layout-tricks-3-optimize-by.html
Ich etwas tun, ähnlich wie für eine app, die ich arbeite.
Einen einfachen Weg, das zu lösen ist, um die standardmäßige Sichtbarkeit der 2. Ansicht zu
android:visibility="GONE"
im XML -, dann identifizieren Sie jede Ansicht in code. Sie können dann die Sichtbarkeit mitview1.setVisibility(View.GONE)
undview2.setVisibility(View.VISIBLE)
Hoffe, das hilft! Es funktionierte großartig für mich 🙂