1

簡単な質問があります。

別のアクティビティで RadioButton を選択した場合、GridView の画像を変更したいと考えています。要するに、アクティビティ A の Gridview の画像をアクティビティ B から変更したいのですが、残念ながら NULLPOINTER が発生します。

Bからの私のコードは次のとおりです。

ラジオボタン1:

       SavePreferences("a0", "1");

ラジオボタン 2:

       SavePreferences("a0", "2");

私の保存設定

   private void SavePreferences(String key, String value){
        SharedPreferences sharedPreferences = getSharedPreferences("sharedPreferences2",           MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(key, value);
        editor.commit();

アクティビティAはこちら

 public String a0 = "1";
 public Integer a1;     
 public Integer a2;
     public Integer a3;
     public Integer a4; 
     public Integer a5;
     public Integer a6;

OnCreateで

    SharedPreferences sharedPreferences = getSharedPreferences("sharedPreferences2", MODE_PRIVATE);
    String a0 = sharedPreferences.getString("a0", "1");
    Log.i("MyActivity", "3:a0= " + a0 );

   if ( a0.equals("1"))

   {         Log.i("MyActivity", "4:a0= " + a0 );

     a1=R.drawable.ic_launcher;
     a2=R.drawable.ic_launcher;
     a3=R.drawable.ic_launcher; 
     a4=R.drawable.ic_launcher; 
     a5=R.drawable.ic_launcher; 
     a6=R.drawable.ic_launcher; 

   }
   if ( a0.equals("2"))
   {                    Log.i("MyActivity", "6:a0= " + a0 );


        a1=R.drawable.test; 
    a2=R.drawable.test;
    a3=R.drawable.test; 
    a4=R.drawable.test; 
    a5=R.drawable.test; 
    a6=R.drawable.test; 

  }

これが私のImageAdapterです

public class ImageAdapter extends BaseAdapter {

[....]


    public Integer[] mThumbIds = {


           a1 , a2,
            a3, a4,
            a5 , a6,

    };

    }

問題がどこにあるかを確認するために、いくつかのログを設定しました。ログ 3 は a0 = 1 を示していますが、ログ 4 は反応していません。

したがって、私のコードは if ループに入りませんが、 a0 == 1 ??

問題がどこにあるのか、誰でも説明してもらえますか?

4

1 に答える 1

1

コードにいくつかの間違いがありますが、怠慢なコーディング スタイルのために目立たなくなります。また、コードが文脈から外れているため、例を貼り付けた方法も不明です。次のように、関連する Class.method にすべてのコード スニペットを貼り付ける必要があります。

class Foo {
  ...
  public bar() {
    ...
    some code;
    ...
  }
};

ただし、問題がどこにあるかはわかっていると思います。アダプタには、アクティビティとは異なる変数があります。mThumbsId は、Activity メンバーの設定方法の影響を受けません。

アダプターを作成するときに必要なデータを渡すことができるように、ID の配列を取るコンストラクターを作成する必要があります。

public class ImageAdapter extends BaseAdapter {
  Integer mThumbIds[];
  Context mContext;
  ...
  ImageAdapter(Context context, Integer thumbs[]) {
    mContext = context;
    mThumbIds = thumbs;
  }
}

また、整数 a1...a6 や文字列 a0 などの変数の使用もやめてください。それらを混乱させるのは簡単です。代わりに配列を使用すると、上記の Adapter コンストラクターに渡すこともできます。

public Class FooActivity extends Activity {
  ...
  Integer imageSetLauncher = {
    R.drawable.ic_launcher,
    R.drawable.ic_launcher,
    R.drawable.ic_launcher,
    R.drawable.ic_launcher,
    R.drawable.ic_launcher,
    R.drawable.ic_launcher
  };

  Integer imageSetTest = {
    R.drawable.test,
    R.drawable.test,
    R.drawable.test,
    R.drawable.test,
    R.drawable.test,
    R.drawable.test
  };

  public void onCreate(Bundle savedInstanceState) {
    ImageAdapter adapter;
    if (a0 == "1") {
      adapter = new ImageAdapter(this, imageSetLauncher);
    }
    if (a0 == "2") {
      adapter = new ImageAdapter(this, imageSetTest);
    }
  }
  ...
};

最後に、スタイルに関する別の問題として、どの変数を public および private にする必要があるかを観察してください。クラス外の変数にアクセスする必要はないが、公開したままにしておくと、別のクラスからアクセスする可能性があり、間違っている可能性があります。

例のコンストラクターへのパラメーター mContext は、ビューを描画するときにもちろん必要になるというだけで、質問には関係ありません。

乾杯!

于 2012-10-21T21:21:05.787 に答える