Transition d'activité avec refactoring de classe JAVA et instance expérimentée côté Android

Contexte

Ce texte peut être utile pour ceux qui souhaitent les deux spécifications suivantes.

1. Refactoring du type d'objet: Sous-classe-> Classe parente-> Conversion de sous-classe, le contenu de l'instance n'est pas réellement réduit ou perdu. (Figure 1)
2. S'il y a un tableau que vous voulez passer au moment de la transition d'activité, vous pouvez passer la classe de l'objet stocké dans le tableau à l'activité suivante en implémentant l'interface Serializable, en utilisant putExtra ordinaire (String name, Serializable value). (Figure 2)

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

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

Code source

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("Les bases de JAVA","À propos des conseils de développement","Les bases de JAVA開発編");
        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. Résultat

Après avoir vérifié la sortie du journal, même si je convertis l'instance en une classe qui n'a pas de classe Contribute (sous-titre), la méthode toString () exécute également la méthode toString () de la classe MyContribution. Cast une instance de MyContribution vers la classe parente Contribution une fois, mais le contenu ne change pas. スクリーンショット 2018-02-06 17.32.55.png figure 3 De plus, le destinataire de la contributionArrayList a reçu l'intégralité de la contributionArrayList sans aucun problème. スクリーンショット 2018-02-06 17.46.34.png Figure 4

Ce n'est pas un gros problème, mais c'est un problème que vous pouvez rencontrer au travail.

Recommended Posts

Transition d'activité avec refactoring de classe JAVA et instance expérimentée côté Android
[Java] Différences entre les variables d'instance et les variables de classe
[Android / Java] Transition d'écran et traitement de retour par fragments
Exécutez Maven sur Java 8 lors de la compilation sur Java 6 et des tests sur Java 11
Je veux faire des transitions d'écran avec kotlin et java!
[Java Silver] Que sont les variables de classe, les variables d'instance et les variables locales?
[Java] Une classe est un système d'exploitation et une instance est un ordinateur virtuel.
Définition et instanciation de classe Java
Différence entre classe et instance
Transition d'écran avec swing, java
Rechercher et exécuter une méthode à partir d'une instance avec traitement (java)
[Java] Structure d'introduction Définition de classe Relation entre classe et instance Format de définition de méthode