java - Android:这个应用程序的最佳层次结构是什么?

标签 java android hierarchy

我有一个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/

相关文章:

java - 如何在Java中添加到链表的开头

java - 如何使用 Java 按字母顺序对文件中的姓氏进行排序?

java - Double 与 BigDecimal?

java - AspectJ 从依赖编织不适用于项目

android mainactivity和服务流程

recursion - 在 Laravel 中使用 Baum 显示分层树/在 Laravel 中使用递归函数

c# - Java 继承与 C# 继承

android - 在 AndroidManifest.xml 中单独使用 intent.category.HOME 与同时使用 intent.category.DEFAULT 之间的区别

java - 使用 java 显示的 Admob 广告未使用 xml 显示

delphi - 如何查看哪个单元使用另一个单元的层次结构? (德尔福)