2017-07-05 4 views
0

Ich entwickle eine Android App. Auf dem Hauptaktivitätsbildschirm befindet sich eine Ansicht, die die onDraw-Methode der View-Klasse aufruft. Aber was ist der richtige Weg, die Sichtweise einzubeziehen?Wie kann ich die beste Möglichkeit mit einbeziehen?

  1. enthalten die Ansicht mit Tags in der XML. Die Ansicht wird gezeichnet.

  2. umfassen die Ansicht mit invalidate() und in der XML-Datei: nichts

    gezogen
  3. : OnDraw zweimal

  4. umfassen die Ansicht mit invalidate() und ohne Tags in der XML-Datei aufgerufen wird

  5. umfassen die Ansicht mit setContentView(): die Ansicht gezogen wird, aber es gibt keine ActionBar mehr

können Sie mir einen Tipp geben, wie es zu lösen? Da wir etwas wollen, kann die Ansicht: 1. Wenn wir zu einer anderen Aktivität gehen, indem Sie auf das Menü der Aktionsleiste klicken und mit der Nach-oben-Taste zurückkehren, sollte die alte Ansicht erneut angezeigt werden und nicht erneut gezeichnet werden. Wie ist das möglich.

  1. mit einer Absicht zu MainActivity durch Klicken auf eine Schaltfläche aus einer anderen Aktivität, sollte die onDraw-Methode aufgerufen werden.

Ich hoffe, jemand kann mir helfen :)

Die XML der Hauptaktivität:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    </android.support.design.widget.AppBarLayout> 

    <include layout="@layout/content_main" /> 

</android.support.design.widget.CoordinatorLayout> 

Der Inhalt XML der Hauptaktivität:

 <?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="MainActivity" 
    tools:showIn="@layout/activity_main"> 


    <view 
     android:id="@+id/view" 
     class="MyView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintHorizontal_bias="0.437" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toTopOf="parent" /> 

</android.support.constraint.ConstraintLayout> 

The Main Actitivity

public class MainActivity extends AppCompatActivity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //XML-Layout über die Ressourcen Variable holen 
     setContentView(R.layout.activity_main); 

     //Toolbar als ActionBar hinzufügen 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     //Logo in Action Bar integrieren 
     getSupportActionBar().setDisplayShowHomeEnabled(true); 
     getSupportActionBar().setLogo(R.drawable.hsd_logo_weiss); 
     getSupportActionBar().setDisplayUseLogoEnabled(true); 
} 
} 

Antwort

0

Wenn es keinen Grund gibt, dies nicht zu tun ...
Gehen Sie wie unter Punkt 1 beschrieben vor. Es ist die einfachste Methode, wenn Sie es in der XML geschrieben und Sie überprüfen, ob die Ansicht regelmäßig gezogen wird, Sie es durch das R-Objekt mit

findviewbyid(R.id.<viewID>)

Nur achten Sie auf die Eltern beziehen könnte, stellen Sie sicher, Ihre Ansichtselemente sind dort, wo sie sein sollen, unter dem richtigen Elternteil

Zum Umschalten zwischen Absicht, ich weiß nicht, warum es sich wie Sie beschreiben ... vor einiger Zeit habe ich Actionbar wie Sie, aber Ich hatte diese Probleme nicht. Versuchen Sie nicht, die onDraw() -Methode zu verwenden, wenn Sie können.

Zumindest können Sie es aus der Ursache des Problems entfernen :)

+0

Vielen Dank für Ihre Antwort. Aber ist es möglich, onDraw nicht zu verwenden? Dann wird die Ansicht nicht gezeichnet. Oder liege ich falsch? Gibt es eine Möglichkeit, besonders zu definieren, wenn die Ansicht gerendert wird und wenn der alte Zustand übernommen wird? – Tommy

+0

Mit Android: launchMode = "singleTop" im Manifest funktioniert es. Der alte Staat ist vergeben. Aber nur in Android 7 gibt es ein Problem: Wenn ich die Up-Taste drücke, werden alle Änderungen der Einstellung Activity angenommen. Die Änderungen sollten jedoch nur angenommen werden, wenn Sie im Einstellungsbildschirm auf die Schaltfläche zum Anwenden klicken. Auf Andorid 5 und 6 funktioniert es gut. – Tommy

+0

Wenn ich mich richtig erinnere, in der activity.xml sollte die Einstellung sein, um die richtige (was war das Wort ...) "Seite", wenn Sie weitermachen und wenn Sie gehen, außer etwas im Code, ** am meisten wahrscheinlich ein Zuhörer **, verändert etwas darin –

Verwandte Themen