2011-12-31 15 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);