Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在android中使用带图像的gridview_Java_Android - Fatal编程技术网

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:

Handler handler;

 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;