0

ネットからJSONとしてデータを取得し、リストビューに表示するアプリを作成しています。

これまでのところ、データを取得して意図したとおりに正常に動作するクラスがあり、カスタム 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();
    }

アダプター:

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;

    }
}
4

4 に答える 4

0

このようにしてみてください

getView()メソッドで

LayoutInflater inflater = (LayoutInflater) context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 row = inflater.inflate(layoutResourceId,null);
于 2013-10-17T14:42:13.553 に答える