クリックするたびに画像を変更するメインアクティビティがありImageButton
ます。
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
static ImageButton mGetClickTime;
mGetClickTime.setOnClickListener(new View.OnClickListener() {
mUpdateBackground();
}
}
}
public static void mUpdateBackground() {
int[] imageIds = {
R.drawable.bg1,
R.drawable.bg2,
R.drawable.bg3,
R.drawable.bg4,
};
Random generator = new Random();
randomImageId = imageIds[generator.nextInt(imageIds.length)];
mGetClickTime.setImageResource(randomImageId);
}
メニューボタンをクリックして別のアクティビティにアクセスするまで、これは正常に機能します
public class settings extends MainActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
}
}
メニューまたは戻るボタンが押されると、メイン アクティビティに戻ります。ただし、これが発生するImageButton
と、クリックするたびに画像が更新されなくなります。クリックするたびにテキスト ボックスが更新されるなど、他のすべては引き続き機能します。
私は何を間違っていますか?
編集
ご助力いただきありがとうございます。現在、サブアクティビティから戻った後も引き続き動作しているようです。(万歳!)
しかし、今では、または他のアクティビティからmUpdateBackground
呼び出されたときにメソッドを機能させることができません。onResume()
私がいる場所は次のとおりです。
1 public class MainActivity extends Activity {
2 public static ImageButton mGetClickTime;
3 @Override
4 protected void onResume() {
5 super.onResume();
6 //Get shared preferences
7 mSharedPreferences = getSharedPreferences(PREFERENCES_NAME, MODE_PRIVATE);
8 dp = mSharedPreferences.getInt("DecimalPlaces", 0);
9 length_setting = mSharedPreferences.getInt("MSSelector", 1);
10 backgroundPic = mSharedPreferences.getBoolean("BackgroundPic", true);
11 //mUpdateBackground();
12 }
12 @Override
13 protected void onCreate(Bundle savedInstanceState) {
14 super.onCreate(savedInstanceState);
15 setContentView(R.layout.activity_main);
16
17 //Get shared preferences
18 mSharedPreferences = getSharedPreferences(PREFERENCES_NAME, MODE_PRIVATE);
19 dp = mSharedPreferences.getInt("DecimalPlaces", 0);
20 length_setting = mSharedPreferences.getInt("MSSelector", 5);
21 mUpdateBackground();
22 mGetClickTime.setOnClickListener(new View.OnClickListener() {
23 mUpdateBackground();
24 }
25 }
26 }
27 public void mUpdateBackground() {
28 if (backgroundPic) {
29 int[] imageIds = {
30 R.drawable.bg1,
31 R.drawable.bg2,
32 R.drawable.bg3,
33 R.drawable.bg4,
34
35 };
36 Random generator = new Random();
37 randomImageId = imageIds[generator.nextInt(imageIds.length)];
38 Log.d("1", "backgroundPic: "+randomImageId);
39 }
40 else {
41 randomImageId = R.drawable.bg0;
42 Log.d("1", "backgroundPicCALLED: "+randomImageId);
43 }
44 mGetClickTime = (ImageButton) findViewById(R.id.clicker);
45 mGetClickTime.setImageResource(randomImageId);
46 }
これに関する問題は、11 行目のコメントを外すと、NullPointerException
. mUpdateBackground()
27行目のメソッドがそうではないからstatic
でしょうか? それを作成するとstatic
、44 行目でエラーが発生します。タイプからメソッドへの参照をfindViewById
作成できません。私は本当に困惑しています。私は明らかにロジックを正しくフォローしていませんが、何度か見直しましたが、それが何であるかわかりません。static
non-static
findViewById(int)
Activity