ページ 11

Intentについて

Posted: 2013年3月22日(金) 02:25
by DADADA
こんばんは.

アクティビティを二つ生成したとします.
ここではActivity1とActivity2とします.
そしてActivity1からActivity2へアクティビティの切り替えを行います.
その際にintentを用いてあるデータ(ここではdata)を渡します.

このとき,activity2が受け取ったデータを他のクラス(ここではCustomViewクラスとします)で
使用したい場合はどのようにしてデータを取得すればよいのでしょうか?

コード:

//Activity1.java

public class Activity1 extends Activity{	
    int data=1;
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);
        Intent intent=new Intent(getApplicationContext(),Activity2.class);
        intent.putExtra("DATA", data);
        startActivity(intent);
	}
}

コード:

//Activity2.java

public class Activity2 extends Activity{	
    int data_1;
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);
        Intent intent=getIntent();
        data_1=intent.getIntExtra("DATA", 0);
	}
}

コード:

//CustomView.java

public class CustomView extends View{
     CustomView(Context context){
        super(context);
       //ここでdataの値を取得して使いたい
     }
}

分かりづらい質問かと思いますがよろしくお願いします.

Re: Intentについて

Posted: 2013年3月22日(金) 12:52
by Dixq (管理人)
CustomViewをnewする時に引数に持たせるか、activityのthisを渡して

Intent intent=activity.getIntent();
int data_1=intent.getIntExtra("DATA", 0);

のように取得するのはどうでしょう。
また、コンストラクタで取得しなくてもsetData_1(int data_1)のようなメソッドをCustomViewに実装して、
Activity2からセットしてはどうでしょう。

他の方法としては、

Activity activity = (Activity)getContext();

でActivityを取得する方法もあります。
ダウンキャストはあまり綺麗な方法ではないですが。

Re: Intentについて

Posted: 2013年3月22日(金) 13:45
by DADADA
返信ありがとうございます.

すみません.
自分の説明が足りませんでした.

今回はCustomViewをxmlファイル内で定義しています.

コード:

//Activity2.java
 
public class Activity2 extends Activity{    
    int data_1;
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Intent intent=getIntent();
        data_1=intent.getIntExtra("DATA", 0);
    }
}

コード:

//main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

  <"パッケージ名".CustomView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

なのでActivity2.java内でnewすることができないため,
引数を持たせたりthisを渡すことができません.
どうすればよいでしょうか.
よろしくお願いします.

Re: Intentについて

Posted: 2013年3月22日(金) 14:17
by Dixq (管理人)
さっき言った通り、contextをダウンキャストしてActivityにできませんか?

コード:

public class CustomView extends View{
     CustomView(Context context){
        super(context);
       Activity activity = (Activity)context;
       Intent intent=activity.getIntent();
       int data_1=intent.getIntExtra("DATA", 0);
     }
}
※追記
上でも述べたとおり、綺麗な方法ではないと思います。
別途set系メソッドを用意して、必要な値を渡すように設計すべきだと思います。

Re: Intentについて

Posted: 2013年3月22日(金) 17:27
by DADADA
できました.
ありがとうございました.