Java 在android中使用带图像的gridview
这是有问题的代码:Java 在android中使用带图像的gridview,java,android,Java,Android,这是有问题的代码: public class Level1 extends Activity { int[] logos = { R.drawable.arutz8, R.drawable.channel1, R.drawable.doctor_gav, R.drawable.foxgroup3, R.drawable.careline, R.drawable.golfnew, R.
public class Level1 extends Activity {
int[] logos = {
R.drawable.arutz8,
R.drawable.channel1,
R.drawable.doctor_gav,
R.drawable.foxgroup3,
R.drawable.careline,
R.drawable.golfnew,
R.drawable.haaretz,
R.drawable.hafenix,
/*R.drawable.hando,
R.drawable.bankleumi,
R.drawable.jerusalempostred,
R.drawable.laisha,
R.drawable.logo,
R.drawable.logodelta,
R.drawable.maariv,
R.drawable.pelephone,
R.drawable.ravbariah,
R.drawable.renuar,
R.drawable.reshet_tv,
R.drawable.sano,
R.drawable.shilav,
R.drawable.sport5,
R.drawable.srigamish,
R.drawable.steimatzky,
R.drawable.superpharm,
R.drawable.supersal,
R.drawable.tambur,
R.drawable.tzometsfarim,
R.drawable.walla,
R.drawable.yediot,*/
};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.level1);
ListAdapter adapter = (new ArrayAdapter<Integer>(this, R.layout.level1));
GridView grid = (GridView) findViewById(R.id.gridview1);
grid.setAdapter(new ImageAdapter(this));
}
private class ImageAdapter extends BaseAdapter
{
private Context context;
public ImageAdapter(Context c)
{
context = c;
}
//---returns the number of images---
public int getCount() {
return logos.length;
}
//---returns the ID of an item---
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
//---returns an ImageView view---
public View getView(int position, View convertView, ViewGroup parent)
{
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(context);
imageView.setLayoutParams(new GridView.LayoutParams(90, 90));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setPadding(5, 5, 5, 5);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(logos[position]);
return imageView;
}
}
公共类级别1扩展活动{
int[]徽标={
R.drawable.arutz8,
R.drawable.channel1,
R.drawable.doctor_gav,
R.drawable.foxgroup3,
R.drawable.careline,
R.drawable.golfnew,
R.drawable.haaretz,
R.drawable.hafenix,
/*R.drawable.hando,
R.drawable.bankleumi,
R.drawable.jerusalempostred,
R.drawable.莱沙,
R.drawable.logo,
R.drawable.logodelta,
R.drawable.maariv,
R.drawable.pelephone,
R.drawable.ravbariah,
R.drawable.renuar,
R.drawable.reshet_电视,
R.drawable.sano,
R.drawable.shilav,
R.drawable.sport5,
R.drawable.srigamish,
R.drawable.steimatzky,
R.drawable.superpharm,
R.drawable.supersal,
R.drawable.tambur,
R.drawable.Tzomesfarim,
R.drawable.walla,
R.drawable.yediot*/
};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.level1);
ListAdapter=(新的ArrayAdapter(this,R.layout.level1));
GridView grid=(GridView)findViewById(R.id.gridview1);
setAdapter(新的ImageAdapter(this));
}
私有类ImageAdapter扩展了BaseAdapter
{
私人语境;
公共图像适配器(上下文c)
{
上下文=c;
}
//---返回图像的数量---
public int getCount(){
返回长度;
}
//---返回项目的ID--
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
//---返回ImageView视图---
公共视图getView(int位置、视图转换视图、视图组父视图)
{
图像视图图像视图;
if(convertView==null){
imageView=新的imageView(上下文);
setLayoutParams(新的GridView.LayoutParams(90,90));
imageView.setScaleType(imageView.ScaleType.FIT_XY);
设置填充(5,5,5,5);
}否则{
imageView=(imageView)convertView;
}
设置图像资源(徽标[位置]);
返回图像视图;
}
}
}
只要所有图像的大小约为每个图像60像素,该程序就可以完美工作。图像大小的问题在于,每个图像都会被压缩,而且其大小也会受到影响!。
我尝试在较大的图像中使用,由于某些原因,只有前五幅图像出现在屏幕上,当我尝试加载其余图像时,应用程序崩溃。
我认为这是因为图像的大小,但后来我意识到所有的图像都是相同的大尺寸,仍然有5幅是在屏幕上绘制的。
有什么想法吗
这些是来自logCat的日志:
这是我按下一级按钮时的结果:
ImageAdapter中的公共视图getView(…)方法存在问题。 当convertView==null时,您永远不会将convertView链接到imageView。因此,else语句中会出现问题。 您可以通过两种方式执行此操作:
- 通过像您那样在代码中定义ImageView,在您的情况下,这将是最佳选择:
其中yourLayoutResourceId是创建的xml布局文件(R.layout.exmaple)的id,imageViewLayoutId是布局中iView的id(R.id.exmapleIV)。
最后一步是在ImageAdapter中定义内部类处理程序:
类处理程序{
图像视图图像视图;
}
祝你好运!
有很好的发展
Kr发布LogCat的崩溃日志,以及演示视觉问题的屏幕截图。我添加了日志和结果感谢您的回答,但不幸的是,第一种方法不起作用,我不理解第二种方法,但我更愿意关注第一种方法ImageView imageView = (ImageView) convertView; if (convertView == null) { convertView = new ImageView(context); imageView = (ImageView) convertView; // Set other parameters } // Set resource return convertView;
- By defining your layout in a xml-layout file an using a layout inflater:
if (convertView == null) { LayoutInflater li = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = li.inflate(yourLayoutResourceId, parent, false); handler = new Handler(); handler.itemIV = (ImageView) convertView.findViewById(imageViewLayoutId); convertView.setTag(handler); } else { handler = (Handler) convertView.getTag(); } handler.imageView.setImageResource(...); return convertView;