我有一个ImageButton
我希望它的图像每次都改变 onResume()
或onCreate()
被调用。
我有一个更改图像的方法,称为 mUpdateBackground
,但我无法弄清楚如何构建层次结构,以便 mUpdateBackground
,(包含 ImageButton
)可以从 onResume()
调用和onCreate()
.
如果backgroundPic
为 true 时,将随机选择图像,如果为 false 则 R.drawable.bg0
将被使用。
有一个单独的设置 Activity 来管理 backgroundPic
是否变量设置为 true 或 false。
这是我到目前为止的代码:
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", "backgroundPic: "+randomImageId);
43 }
44 mGetClickTime = (ImageButton) findViewById(R.id.clicker);
45 mGetClickTime.setImageResource(randomImageId);
46 }
我遇到的问题是,如果我取消注释第11行,我会得到一个NullPointerException。我应该有更好的方法来组织这段代码吗?
最佳答案
在使用代码之前,您应该检查代码是否有空值。您在使用前不检查 imageIds[] 是否为 null,而且(已经有一段时间了)您想确保 mGetClickTime 已由 findViewById 分配了某些内容。在 onresume 中,似乎总是有可能出现内存不足的情况。我通常会检查所有内容,看看当我过去完成 android 操作时是否需要在简历中重新初始化变量。我建议将此作为一种调试和更加健壮的方法。
关于java - Android:这个应用程序的最佳层次结构是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16634598/