我想在GridView中加载保存在 res-> drawable->" a1.png"
在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,或者因为只需要一直加载相同的图像。
希望有人可以帮我优化或给我一些建议,抱歉我的英文。
欢迎所有评论。