Aktivitätsübergang mit JAVA-Klassen-Refactoring und Instanz-Experimentieren auf Android-Seite

Hintergrund

Dieser Text kann für diejenigen hilfreich sein, die die folgenden zwei Spezifikationen wünschen.

1. Refactoring des Objekttyps: Unterklasse-> Übergeordnete Klasse-> Unterklassenkonvertierung, der Inhalt der Instanz wird nicht verkleinert oder geht verloren. (Abbildung 1)
2. Wenn es ein Array gibt, das Sie zum Zeitpunkt des Aktivitätsübergangs übergeben möchten, können Sie die Klasse des im Array gespeicherten Objekts an die nächste Aktivität übergeben, indem Sie die Schnittstelle Serializable mit normalem putExtra (String name, Serializable value) implementieren. (Figur 2)

スクリーンショット 2018-02-06 17.10.16.png Abbildung 1

スクリーンショット 2018-02-06 17.19.59.png Figur 2

Quellcode

1.Contribution.java


public class Contribution implements Serializable{
    String category;
    Date time;
    String title;
    String content;

    public Contribution(){
        category = "general";
        time = new Date();
        title = "general";
    }


    public String getCategory() {
        return category;
    }

    public String getTime() {
        return time.toString();
    }

    public void setTime(Date time) {
        this.time = time;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }


    public String toString() {
        return "Contribution-->Title:   " + getTitle() + "\nCategory:   " + getCategory() +"\nContent:n" + getContent() + "\nDate:   " + getTime();
    }



}

2.MyContribution.java

public class MyContribution extends Contribution{
    public String subTitle;

    public MyContribution(String _title,String _content,String _subTitle){
        title = _title;
        content = _content;
        subTitle = _subTitle;
        category = "training";
    }

    public String getSubTitle() {
        return subTitle;
    }

    public String toString(){
        return "MyContribution-->Title:   " + getTitle() + "\nsubtitle:   " + getSubTitle() + "\nCategory:   " + getCategory() +"\nContent:\n" + getContent() + "\nDate:   " + getTime();
    }
}

3.TypeConvertActivity.java

public class TypeConvertActivity extends AppCompatActivity {
    Contribution contribution = null;
    ArrayList<MyContribution> myContributionArrayList;
    ArrayList<Contribution> contributionArrayList;
    ArrayList<MyContribution> myRecoveryContributionArrayList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_type_convert);

        MyContribution myContribution = new MyContribution("JAVA Grundlagen","Über Entwicklungstipps","JAVA Grundlagen開発編");
        contribution = (Contribution) myContribution;

        myContributionArrayList = new ArrayList<MyContribution>();
        contributionArrayList = new ArrayList<Contribution>();
        myRecoveryContributionArrayList = new ArrayList<MyContribution>();

        myContributionArrayList.add(new MyContribution("Java Study1","new String('good day')","String Type"));
        myContributionArrayList.add(new MyContribution("Java Study2","new Boolean(true)","Boolean Type"));
        myContributionArrayList.add(new MyContribution("Java Study3","new Integer(17)","Integer Type"));
        myContributionArrayList.add(new MyContribution("Java Study4","new ArrayList<>()","ArrayList Type"));
        myContributionArrayList.add(new MyContribution("Java Study5","new Double(3.1415926)","Double Type"));


        for(MyContribution m:myContributionArrayList){
            Log.d("myContribution",m.toString());
            contributionArrayList.add((Contribution) m);
        }

        for(Contribution m:contributionArrayList){
            Log.d("Contribution",m.toString());
            myRecoveryContributionArrayList.add((MyContribution) m);
        }

        for(MyContribution m:myRecoveryContributionArrayList){
            Log.d("Recovery Contribution",m.toString());
        }


        Button bringContributionToNextPage = (Button) findViewById(R.id.bringContributionToNextPage);
        bringContributionToNextPage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                goToActivity();
            }
        });

    }

    private void goToActivity(){
        Intent intent = new Intent(getApplication(),ReceiveTypeConvertActivity.class);
        intent.putExtra("contribution", contribution);
        intent.putExtra("contributionArrayList",contributionArrayList);
        startActivity(intent);
    }


}

4.activity_type_convert.xml

<?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"
    tools:context="com.example.syoui.imagetab.java_knowledge.TypeConvertActivity">

    <Button
        android:id="@+id/bringContributionToNextPage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="BringContributionToNextPage"/>
</android.support.constraint.ConstraintLayout>

5.ReceiveTypeConvertActivity


public class ReceiveTypeConvertActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_receive_type_convert);
        Intent intent = getIntent();
        Serializable contributionSerial = intent.getSerializableExtra("contribution");
        if(contributionSerial != null){
            Contribution contribution = (Contribution) contributionSerial;
            Log.d("Receive:contribution",contribution.toString());
        }

        Serializable contributionArrayListSerial = intent.getSerializableExtra("contributionArrayList");
        if(contributionArrayListSerial != null){
            ArrayList<Contribution> contributionArrayList = ( ArrayList<Contribution>)contributionArrayListSerial;
            for(Contribution m:contributionArrayList){
                Log.d("contributionArrayList",m.toString());
            }
        }


    }
}

6.activity_receive_type_convert.xml

<?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"
    tools:context="com.example.syoui.imagetab.java_knowledge.ReceiveTypeConvertActivity">

</android.support.constraint.ConstraintLayout>

3. Ergebnis

Nach dem Überprüfen der Ausgabe des Protokolls führt die toString () -Methode auch die toString () -Methode der MyContribution-Klasse aus, selbst wenn ich die Instanz in eine Klasse umwandle, die keine Contribute-Klasse (Untertitel) hat. Verwandeln Sie eine Instanz von MyContribution einmal in die übergeordnete Klasse Contribution, aber der Inhalt ändert sich nicht. スクリーンショット 2018-02-06 17.32.55.png Figur 3 Außerdem hat der Empfänger der ContributionArrayList problemlos die gesamte ContributionArrayList erhalten. スクリーンショット 2018-02-06 17.46.34.png Figur 4

Es ist keine große Sache, aber es ist ein Problem, auf das Sie bei der Arbeit stoßen können.

Recommended Posts

Aktivitätsübergang mit JAVA-Klassen-Refactoring und Instanz-Experimentieren auf Android-Seite
[Java] Unterschiede zwischen Instanzvariablen und Klassenvariablen
[Android / Java] Bildschirmübergang und Rückgabeverarbeitung in Fragmenten
Führen Sie Maven unter Java 8 aus, während Sie unter Java 6 kompilieren und unter Java 11 testen
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
[Java Silver] Was sind Klassenvariablen, Instanzvariablen und lokale Variablen?
[Java] Eine Klasse ist ein Betriebssystem und eine Instanz ist ein virtueller Computer.
Definition und Instanziierung von Java-Klassen
Unterschied zwischen Klasse und Instanz
Bildschirmübergang mit Swing, Java
Suchen und Ausführen einer Methode aus einer Instanz mit Verarbeitung (Java)
[Java] Einführungsstruktur Klassendefinition Beziehung zwischen Klasse und Instanz Methodendefinitionsformat