我有ListView
使用自定义适配器,自定义适配器使用来自JsonObject
数组的数据(是的,不是JsonArray
),我的列表似乎相当迟缓,我有使用了持有者模式并清除了我getView()
方法中几乎所有对象实例,我还有哪些替代方案?现在它是特定列表中负载最多的,48个元素具有以下膨胀视图:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp" >
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp"
android:layout_weight="1" >
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textSize="15sp"
android:textStyle="bold" />
<TextView
android:id="@+id/comment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top" />
</LinearLayout>
<TextView
android:id="@+id/price"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.8"
android:gravity="right|center_vertical"
android:textSize="35sp"
android:textStyle="bold"
android:textColor="@color/dark_green" />
<TextView
android:id="@+id/curr"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.3"
android:gravity="left|center_vertical"
android:paddingLeft="5dp"
android:textSize="14sp" />
</LinearLayout>
我的Adapter类看起来像这样:
public class DetalleJsonAdapter extends ArrayAdapter<JsonObject> {
Context context;
int layoutResourceId;
JsonObject data[] = null;
public DetalleJsonAdapter(Context context, int layoutResourceId,
JsonObject[] data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
JsonObjectHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new JsonObjectHolder();
holder.flagIcon1 = (ImageView) row.findViewById(R.id.flagIcon1);
holder.score = (TextView) row.findViewById(R.id.score);
holder.flagIcon2 = (ImageView) row.findViewById(R.id.flagIcon2);
row.setTag(holder);
} else {
holder = (JsonObjectHolder) row.getTag();
}
JsonObject jso = data[position];
holder.flagIcon1.setImageResource(FlagUtil.getFlagByIntCode(jso.get(
"url_icon1").getAsString()));
holder.score.setText(jso.get("goles_estimados_e1").getAsString()
+ " - " + jso.get("goles_estimados_e2").getAsString());
holder.flagIcon2.setImageResource(FlagUtil.getFlagByIntCode(jso.get(
"url_icon2").getAsString()));
return row;
}
static class JsonObjectHolder {
ImageView flagIcon1;
TextView score;
ImageView flagIcon2;
}
}
请记住,列表元素也会有一个没有在这个版本中实现的点击监听器,我真的不知道会有什么性能影响,但除了我所做的,还有什么可以我为这个列表表现吗?我担心我的大部分问题都是由于重复使用setImageResource()
,我有什么选择?
修改:getFlagByIntCode()
代码:
package com.tghsistemas.curia.quini.util;
import com.tghsistemas.curia.quini.csquini.R;
公共类FlagUtil {
public static int getFlagByIntCode(String code) {
if (code.equals("ALG")) {
return R.drawable.flag_circle_alg;
} else if (code.equals("ARG")) {
return R.drawable.flag_circle_arg;
} else if (code.equals("AUS")) {
return R.drawable.flag_circle_aus;
} else if (code.equals("BEL")) {
return R.drawable.flag_circle_bel;
} else if (code.equals("BRA")) {
return R.drawable.flag_circle_bra;
} else if (code.equals("BIH")) {
return R.drawable.flag_circle_bih;
} else if (code.equals("CHI")) {
return R.drawable.flag_circle_chi;
} else if (code.equals("CIV")) {
return R.drawable.flag_circle_civ;
} else if (code.equals("CMR")) {
return R.drawable.flag_circle_cmr;
} else if (code.equals("COL")) {
return R.drawable.flag_circle_col;
} else if (code.equals("CRC")) {
return R.drawable.flag_circle_crc;
} else if (code.equals("CRO")) {
return R.drawable.flag_circle_cro;
} else if (code.equals("ECU")) {
return R.drawable.flag_circle_ecu;
} else if (code.equals("ENG")) {
return R.drawable.flag_circle_eng;
} else if (code.equals("ESP")) {
return R.drawable.flag_circle_esp;
} else if (code.equals("FRA")) {
return R.drawable.flag_circle_fra;
} else if (code.equals("GER")) {
return R.drawable.flag_circle_ger;
} else if (code.equals("GHA")) {
return R.drawable.flag_circle_gha;
} else if (code.equals("GRE")) {
return R.drawable.flag_circle_gre;
} else if (code.equals("HON")) {
return R.drawable.flag_circle_hon;
} else if (code.equals("IRN")) {
return R.drawable.flag_circle_irn;
} else if (code.equals("ITA")) {
return R.drawable.flag_circle_ita;
} else if (code.equals("JPN")) {
return R.drawable.flag_circle_jpn;
} else if (code.equals("KOR")) {
return R.drawable.flag_circle_kor;
} else if (code.equals("MEX")) {
return R.drawable.flag_circle_mex;
} else if (code.equals("NED")) {
return R.drawable.flag_circle_ned;
} else if (code.equals("NIG")) {
return R.drawable.flag_circle_nig;
} else if (code.equals("POR")) {
return R.drawable.flag_circle_por;
} else if (code.equals("RUS")) {
return R.drawable.flag_circle_rus;
} else if (code.equals("SWE")) {
return R.drawable.flag_circle_swe;
} else if (code.equals("URU")) {
return R.drawable.flag_circle_uru;
} else if (code.equals("USA")) {
return R.drawable.flag_circle_usa;
} else {
return R.drawable.red_shell_placeholder;
}
}
}