I have a main activity that changes the image on the ImageButton
on every click.
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);
}
This works fine, until the menu button is clicked and another activity is accessed
public class settings extends MainActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
}
}
When the menu or back button is pressed, we return to the main activity. But once this has happened, the ImageButton
no longer has the image updated with every click. Everything else still works, including text boxes updating on each click.
What am I doing wrong?
EDIT
Thanks for all your help. At the moment, it seems to continue working after I return from the sub-activity. (Hooray!)
But now I can't get the mUpdateBackground
method to work when called from onResume()
, or from the other activity. Here's where I'm at:
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 }
The problem I have with this is that if I uncomment line 11 I get a NullPointerException
. Could that be because the mUpdateBackground()
method at line 27 isn't static
? If I make it static
then at line 44 I get an error on findViewById
, Cannot make a static
reference to the non-static
method findViewById(int)
from the type Activity
. I'm really stumped. I'm obviously not following the logic correctly but I've gone over it a few times and I can't see what it could be.