0

クリックするたびに画像を変更するメインアクティビティがあり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作成できません。私は本当に困惑しています。私は明らかにロジックを正しくフォローしていませんが、何度か見直しましたが、それが何であるかわかりません。staticnon-staticfindViewById(int)Activity

4

2 に答える 2

0

このスレッドから答えを得ました: Android: このアプリに最適な階層は?

重要なのは、オブジェクトを呼び出す前に null かどうかをチェックするという概念を学ぶことでした。

私が使用したコードはこれでした:

    if (mGetClickTime != null) {
        Log.d("mGetClickTime: ", "is not null");
        mGetClickTime.setImageResource(randomImageId);
    }
    else {
        mGetClickTime = (ImageButton) findViewById(R.id.clicker);
        mGetClickTime.setImageResource(randomImageId);
        Log.d("mUpdateBackground", " was null");
    }
于 2013-05-19T21:27:10.703 に答える