Android GridView图像来自JSON

时间:2018-02-22 13:30:20

标签: android gridview android-image

我想在GridView中加载保存在 res-> drawable->" a1.png"

enter image description here

在GridView中,我有一个函数读取JSON并将其作为JSON数组返回。

对于JSON数组中的每个对象,我创建一个 new monsterobject(m)并设置变量(m.setName,m.setIcon)

所有Itemobjects都将被添加到ItemObject数组并将其发送到适配器。

这里是Adapter.class

package com.example.anonymous.mh4;

/**
 * Created by Anonymous on 21/02/2018.
 */

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.lang.reflect.Field;

public class MonsterAdapter extends BaseAdapter {

    private final Context mContext;
    private final Monster[] monsters;



    // 1
    public MonsterAdapter(Context context, Monster[] monsters) {
        this.mContext = context;
        this.monsters = monsters;
    }

    // 2
    @Override
    public int getCount() {
        return monsters.length;
    }

    // 3
    @Override
    public long getItemId(int position) {
        return 0;
    }

    // 4
    @Override
    public Object getItem(int position) {
        return null;
    }

    // 5
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // 1


        // 2
        if (convertView == null) {
            final LayoutInflater layoutInflater = LayoutInflater.from(mContext);
            convertView = layoutInflater.inflate(R.layout.listviewitemmonster, null);
        }
        // 3
        final ImageView imageView = (ImageView)convertView.findViewById(R.id.imglayout);
        final TextView nameTextView = (TextView)convertView.findViewById(R.id.namelayout);

        // 4
        final Monster m = monsters[position];

        nameTextView.setText(m.getName());
        imageView.setImageResource(getDrawableId(m.Icon()));

        return convertView;
    }

    public int getDrawableId(String name){
        try {
            Field fld = R.drawable.class.getField(name);
            return fld.getInt(null);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return -1;
    }

}

看起来如果我使用该函数来获取图像的id,使用我的图标的名称(从类中获取 - >从de json获得)并将其设置为imgview在我的布局中,我的网格视图在应用中滞后

如果我使用:

imageview.setImageDrawable(getResources().getDrawable(a1));;

为所有怪物加载相同的图像,但 gridview不会滞后。 显然我想把正确的图像放到所有怪物身上而不会滞后。

我不知道是因为不需要获取ID,或者因为只需要一直加载相同的图像。

希望有人可以帮我优化或给我一些建议,抱歉我的英文

欢迎所有评论。

0 个答案:

没有答案