2011-12-31 17 views
0

我有一個活動20個ImageViews名爲level0 ... level20。我想要改變前10個ImageViews的圖像源。我嘗試過,但沒有好的結果。 plase幫助我。ImageViews數組有什麼問題?

private ImageView [] lvlImgs; 
private int unlocked=10; 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.levels);  
    for(int i=0;i<unlocked;i++) 
    { 
    int id = getResources().getIdentifier("level"+i, "id", this.getPackageName()); 
    lvlImgs[i]=(ImageView)findViewById(id); 
    lvlImgs[i].setImageResource(R.drawable.new_image_to_show); 
    }  
} 
+0

會發生什麼? 'findViewById(id)'返回null,你會在下一行出現NullPointerException? – 2011-12-31 14:13:13

回答

0

你應該發佈你的Exception或錯誤也。

考慮到你的發佈代碼,我能明白其中的道理是

你是不是你的初始化數組lvlImgs,因爲它應該是:

lvlImgs = new ImageView [unlocked]; 

這可能是應用程序崩潰的一個原因。

發佈您的Exception log-cat可能有助於我們理解問題。

0

感謝您的回答。我找到了其他的方法:使用GridView和ImageAdapter類。對於那些有興趣:

public class ImageAdapter extends BaseAdapter { 
private Context mContext; 
private int unlocked=10; 
public ImageAdapter(Context c) { 
    mContext = c; 
} 

public int getCount() { 
    return 20; 
} 

public Object getItem(int position) { 
    return null; 
} 

public long getItemId(int position) { 
    return 0; 
} 

// create a new ImageView for each item referenced by the Adapter 
public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView == null) { // if it's not recycled, initialize some attributes 
     imageView = new ImageView(mContext); 
     imageView.setLayoutParams(new GridView.LayoutParams(90, 50)); 
     imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); 
      } else { 
     imageView = (ImageView) convertView; 
    } 

    if(position<unlocked){ 
    imageView.setImageResource(R.drawable.gheta_med); 
    }else{ 
     imageView.setImageResource(R.drawable.gheta_med_lock); 
    } 

    return imageView; 
} 

,並在我的活動

GridView gridview = (GridView) findViewById(R.id.gridview); 
    gridview.setAdapter(new ImageAdapter(this)); 
    gridview.setOnItemClickListener(new OnItemClickListener() { 
       public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { 
       Log.i("item", ""+arg2);