Intentについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
DADADA

Intentについて

#1

投稿記事 by DADADA » 13年前

こんばんは.

アクティビティを二つ生成したとします.
ここでは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の値を取得して使いたい
     }
}

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

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: Intentについて

#2

投稿記事 by Dixq (管理人) » 13年前

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を取得する方法もあります。
ダウンキャストはあまり綺麗な方法ではないですが。

DADADA

Re: Intentについて

#3

投稿記事 by DADADA » 13年前

返信ありがとうございます.

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

今回は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を渡すことができません.
どうすればよいでしょうか.
よろしくお願いします.

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: Intentについて

#4

投稿記事 by Dixq (管理人) » 13年前

さっき言った通り、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系メソッドを用意して、必要な値を渡すように設計すべきだと思います。

DADADA

Re: Intentについて

#5

投稿記事 by DADADA » 13年前

できました.
ありがとうございました.

閉鎖

“C言語何でも質問掲示板” へ戻る