LoginSignup
1
0

More than 5 years have passed since last update.

Android側で実験したJAVAクラスリファクタリングとインスタンスを持ってアクティビティ遷移

Posted at

背景

この文章は次の二つの仕様が欲しい人にとっては参考になれるかもしれません。

1.オブジェクトの型のリファクタリング:サブクラス->親クラス->サブクラス変換で、インスタンスの中身は実は縮めたりなくなったりしていない。(図1)
2.アクティビティ遷移する時に渡したい配列があれば、配列に納めたオブジェクトのクラスをSerializableインタフェースを実装すれば、普通のputExtra(String name, Serializable value)を使って、次のアクティビティへ渡せる。(図2)

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

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

ソースコード

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基礎","開発のコツについて","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.結果

ログの出力を確認したら、インスタンスをContributeクラス(subtitle)を持っていないクラスにcastしても、toString()メソードはまたMyContributionクラスのtoString()メソードを実行されている。MyContributionのインスタンスを一回親クラスContributionにcast下が、中身は変わりません。
スクリーンショット 2018-02-06 17.32.55.png
図3
またcontributionArrayListを受け取る側でも問題なくcontributionArrayListをまるごとに受け取りました。
スクリーンショット 2018-02-06 17.46.34.png
図4

大したことではないですが、仕事で出会える問題です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0