我有一个简单的问题。
如果我在另一个Activity中选择一个RadioButton,我想更改GridView的图像。 简而言之:我想从活动B中的活动A更改Gridview的图像。 可悲的是我得到了NULLPOINTER。
这是我的B代码:
RadioButton1:
SavePreferences("a0", "1");
RadioButton2:
SavePreferences("a0", "2");
我的SavePreferences
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 ??
任何人都可以解释一下,问题在哪里?
答案 0 :(得分:1)
老兄你在代码中有一些错误,因为疏忽的编码风格而不那么明显。您粘贴示例的方式也不清楚,因为代码不在上下文中。您应该将每个代码段粘贴到相关的Class.method中,如下所示:
class Foo {
...
public bar() {
...
some code;
...
}
};
但是我想我知道问题出在哪里:你的适配器中的变量与你的Activity中的变量不同。 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等变量。让他们感到困惑很容易。使用数组代替,然后您也可以愉快地将其传递给上述适配器构造函数:
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与您的问题无关,只是在绘制视图时您当然需要它。
干杯!