MainActivity以外からfindViewByIdしたい、他クラスに値を渡したいとき
引数を使ってMainActivityを他クラスに渡せない場合のやり方メモ
メソッドを使う
MainActivity.java
public class MainActivity extends AppCompatActivity {
//context用意
public Context conText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// conTextにMainActivityを入れる
conText=this;
//context受け渡し
//メソッドでセット
TestService.setConText(conText);
}
SubActivity.java
public class SubActivity {
//context用意 static忘れない
public static Context conText2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//findViewByIdでconText2を使用
textRead = ((com.example.backgroundservice.MainActivity) conText2).findViewById(R.id.text_read);
}
//contextをセットするメソッド static忘れない
public static void setConText(Context ct){
conText2=ct;
}
}
<public>
他クラスからもアクセス可能にする
<static>
staticは呼び出し時にインスタンス化しなくても使えるようにするもの
今回の場合、MainActivityではSubActivityのインスタンスを生成せずにメソッドを呼び出しているからstatic必要
クラス名.メソッド名
クラス名.変数名
で使える
※メソッドにも変数にもstaticを付けとかなければいけない
分かりにくいが、MainActivityで定義したconTextとSubActivityで定義して実際に使用しているconTextは全く別物
他クラスに値を渡す方法として
・引数
・フィールドをpublicやstaticにして参照(クラス名.変数名で使用)
・メソッドで値をセット