1

我有一个快速的问题。

如果我在另一个 Activity 中选择 RadioButton,我想更改 GridView 的图像。简而言之:我想从 Activity B 更改 Activity A 的 Gridview 图像。遗憾的是我得到了 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,

    };

    }

我设置了一些日志来查看问题所在。Log 3 说 a0 = 1 但 Log 4 没有反应。

所以我的代码没有进入 if 循环,虽然 a0 == 1 ??

谁能解释一下,问题出在哪里?

4

1 回答 1

1

伙计,您的代码中有一些错误,由于疏忽的编码风格,这些错误不太明显。此外,您粘贴示例的方式也不清楚,因为代码脱离了上下文。您应该将每个代码片段粘贴到相关的 Class.method 中,如下所示:

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

但是我想我知道问题出在哪里:适配器中的变量与活动中的变量不同。mThumbsId 不受您设置活动成员的方式的影响。

您应该创建一个采用 id 数组的构造函数,以便在创建适配器时传递所需的数据:

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

也请停止使用 Integer a1...a6 和 String 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);
    }
  }
  ...
};

最后,另一个风格问题,请观察哪些变量需要是公共的和私有的。如果您不需要访问类之外的变量,但您将其公开,那么您可能会从另一个错误的类中访问它。

示例中构造函数的参数 mContext 与您的问题无关,只是在绘制视图时您当然需要它。

干杯!

于 2012-10-21T21:21:05.787 回答