更改Gridview的图像

时间:2012-10-21 20:17:36

标签: android gridview

我有一个简单的问题。

如果我在另一个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 ??

任何人都可以解释一下,问题在哪里?

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与您的问题无关,只是在绘制视图时您当然需要它。

干杯!