Java 显示循环读取的第一个图像

Java 显示循环读取的第一个图像,java,android,imageview,Java,Android,Imageview,我想显示用户输入的信件的相应图像。但问题是,循环会重复显示读取的第一个图像 public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflat

我想显示用户输入的信件的相应图像。但问题是,循环会重复显示读取的第一个图像

public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.activity_list, null, true);
    ImageView imageView = (ImageView)rowView.findViewById(R.id.img);

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.activity_list, parent, false);
    }

    for (int loop = 0; loop < ALPHA.length; loop++) {
        for (int j = 0; j < alphaSplit.length; j++) {
            if (alphaSplit[j] == ALPHA[loop]) {
                imageView.setImageResource(ICONS[loop]);
            }
        }
    }
    return rowView;
}
public View getView(int位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
视图行视图=充气机。充气(R.layout.activity_list,null,true);
ImageView ImageView=(ImageView)rowView.findViewById(R.id.img);
if(convertView==null){
convertView=充气机。充气(R.layout.activity\u列表,父项,false);
}
for(int loop=0;loop
这已经是我修改过的GET视图

public View getView(int position, View convertView, ViewGroup parent) {

    Holder holder;

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.activity_list, null);

        holder = new Holder();
        holder.imageView = (ImageView) convertView.findViewById(R.id.img);

        convertView.setTag(holder);
    } else {
        holder = (Holder) convertView.getTag();
    }

    for (int loop = 0; loop < alphaSplit.length; loop++) {
        for (int j = 0; j < ALPHA.length; j++) {
            if (alphaSplit[loop] == ALPHA[j]) {
                holder.imageView.setImageResource(ICONS[j]);
            }
        }
    }
    return convertView;
}
public View getView(int位置、视图转换视图、视图组父视图){
持有人;
if(convertView==null){
convertView=充气机。充气(R.layout.activity\u列表,空);
保持架=新保持架();
holder.imageView=(imageView)convertView.findViewById(R.id.img);
convertView.setTag(支架);
}否则{
holder=(holder)convertView.getTag();
}
for(int loop=0;loop

但是它会显示循环获取的最后一个对应图像,而你的想法是错误的

首先,不要反复定义
LayoutInflater
。为适配器创建构造函数,并将其作为参数获取
Context

LayoutInflater inflater;
public YourAdapter(Context context) {
    inflater = LayoutInflater.from(context);
}
其次,明智地使用
convertView
,将静态保持架设置为其标记:

static class Holder{
    ImageView imageView;
}

public View getView(int position, View convertView, ViewGroup parent) {
    Holder holder;

    if (convertView == null) {
        convertView = inflater.inflate(...); //I'd recommend setting it (*layout, null);

        holder = new Holder();
        holder.imageView = (ImageView) convertView.findViewById(R.id.img);

        convertView.setTag(holder);
    } else {
        holder = (Holder) convertView.getTag();
    }

    for (int loop = 0; loop < ALPHA.length; loop++) {
        for (int j = 0; j < alphaSplit.length; j++) {
            if (alphaSplit[j] == ALPHA[loop]) {
                holder.imageView.setImageResource(ICONS[loop]);
            }
        }
    }

    return convertView;
}
静态类持有者{
图像视图图像视图;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
持有人;
if(convertView==null){
convertView=inflater.inflate(…);//我建议设置它(*布局,null);
保持架=新保持架();
holder.imageView=(imageView)convertView.findViewById(R.id.img);
convertView.setTag(支架);
}否则{
holder=(holder)convertView.getTag();
}
for(int loop=0;loop

请参阅,检查
convertView==null
仅用于定义和充气第一个可见视图。然后,您需要更新相同视图中的数据,这样就产生了滚动的错觉(实际上每次都不会膨胀新视图)。

实际问题是什么?你想在内部循环中得到第一个图像还是什么?你的前5行看起来很傻。您正在膨胀rowView,然后使用convert view重新膨胀它?看起来整条convertview线都没用了。这可能是您的问题所在。@Elltz我想显示if语句是否正确true@hitch.united我已经修改了我的代码。但一切都没有改变。它重复显示第一个图像,并且总是检查为false?记录这些值,看看是否找到了匹配的NPE:
convertView=inflater.inflate(R.layout.activity\u list,null)用你的充气机替换他的充气机,这样你就可以摆脱NPE和生活中的好东西了这与它充气的方式无关。。。请详细说明您现在遇到的错误。另外,我看到了你编辑的帖子,现在的问题似乎是你自己的循环,我没有检查。适配器方面,您是fine@SaharAvr对我的循环是错误的。但我的问题是,它只显示循环将获取的最后一项