我正在製作一個應用程序,從網絡獲取一些數據作爲JSON,然後它應該顯示在列表視圖中。使用JSONArray數據的ArrayAdapter不調用getView()
到目前爲止,我有一個類獲取數據,併成功並按預期工作,然後我有一個自定義的ArrayAdapter類。當我使用soem Log.d()在不同的地方運行代碼來檢查代碼是否正常工作時,應用程序將打開,下載JSON並將其發送回我的活動,然後將數據發送到數組適配器成功
(通過調用發送到適配器的數據中的第一個JSONObject的字段來測試此操作)。
據我所知,問題在於getView()方法在它應該被調用時沒有被調用。
代碼:
try {
listAdapter = new CropListAdapter(this, R.layout.crop_listitem,
crops.getJSONArray("crops"));
listView.setAdapter(listAdapter);
// setUpViews();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Adapater:
public class CropListAdapter extends ArrayAdapter<JSONArray> {
Context context;
JSONArray data;
int layoutResourceId;
CropHolder cropHolder;
public CropListAdapter(Context context, int layoutResourceId, JSONArray data) {
super(context, layoutResourceId);
// TODO Auto-generated constructor stub
this.context = context;
this.data = data;
this.layoutResourceId = layoutResourceId;
this.cropHolder = null;
}
@Override
public View getView(int pos, View convertView, ViewGroup parent) {
Log.d("Working", "works here 38");
View row = convertView;
JSONObject crop;
try {
Log.d("Pos", Integer.toString(pos));
crop = (JSONObject) data.getJSONObject(pos);
if (row == null) {
LayoutInflater inflater = ((Activity) context)
.getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
cropHolder = new CropHolder();
cropHolder.tvCropId = (TextView) row
.findViewById(R.id.tvCropId);
cropHolder.tvCropName = (TextView) row
.findViewById(R.id.tvCropName);
cropHolder.ivCropImage = (ImageView) row
.findViewById(R.id.ivCropImage);
row.setTag(cropHolder);
} else {
cropHolder = (CropHolder) row.getTag();
}
cropHolder.tvCropId.setText(crop.getString("crop_id"));
cropHolder.tvCropName.setText(crop.getString("name"));
Log.d("Item", "creating item " + crop.getString("name"));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return row;
}
static class CropHolder {
TextView tvCropName;
ImageView ivCropImage;
TextView tvCropId;
}
}
只是一個大約的實施建議,您不妨到您的JSON轉換成一個原生對象作爲中間數據,你應該不斷切換你的從JSON到XML(或任何其他)的Web服務。只是我的2分。 –