0

私の ListView には、2 つの TextView と 1 つの ImageView があります。このリンク
に従って、LazyAdapter を使用して JSON ファイルから画像をロードしています。

データを正常にロードしていますが、画像自体は正しく表示されているのに、各リスト項目が両方の TextView に画像のリンクを表示するという問題に直面しています。

アダプターは次のとおりです。
public class LazyAdapter extends BaseAdapter {

private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
public ImageLoader imageLoader; 

public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
    activity = a;
    data=d;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    imageLoader=new ImageLoader(activity.getApplicationContext());
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return data.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View vi=convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.item, null);

    TextView name = (TextView)vi.findViewById(R.id.name);
    TextView price = (TextView)vi.findViewById(R.id.price); 
    ImageView image=(ImageView)vi.findViewById(R.id.image); 

    HashMap<String, String> smart = new HashMap<String, String>();
    smart = data.get(position);

    id.setText(smart.get(SmActivity.KEY_ID));
    name.setText(smart.get(SmActivity.KEY_NAME));

    price.setText(smart.get(SmActivity.KEY_PRICE));
    imageLoader.DisplayImage(smart.get(SmActivity.KEY_THUMB), image);
    return vi;
}

}

アクティビティは次のとおりです。
public class SmActivity extends ListActivity {

static String url = "url-php to get json";

public static String KEY_PRICE, KEY_NAME, KEY_THUMB;

ListView list;  
LazyAdapter adapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ArrayList<HashMap<String, String>> smList = new ArrayList<HashMap<String, String>>();

    JSONParser jParser = new JSONParser();
    JSONObject json = jParser.getJson(url);

    try {
        JSONArray smJArray = json.getJSONArray("sm");
        for(int i = 0; i < smJArray.length(); i++){

        HashMap<String, String> map = new HashMap<String, String>();    
            JSONObject jsonObj = smJArray.getJSONObject(i);

            map.put(KEY_NAME, jsonObj.getString("product_name"));
            map.put(KEY_PRICE, jsonObj.getString("price")+"€");
            map.put(KEY_THUMB, jsonObj.getString("image_main"));
            smList.add(map);       
        }   
    } 
    catch (JSONException e) {

        e.printStackTrace();
    }
    list = (ListView)getListView().findViewById(android.R.id.list);
    adapter=new LazyAdapter(this, smList);        
    list.setAdapter(adapter);
}

}

ListView は、map.put(...)私が使用している最後の値をすべての項目に表示することを理解できます。
たとえば、HashMap の最後の put が map.put(KEY_PRICE, jsonObj.getString("price")+"€"); の場合
価格だけでなく、TextViewという名前でも価格値を取得します。そしてもちろん、私はイメージを取得しません。

どんな助けにも感謝します。
前もって感謝します。

4

1 に答える 1

0

Ok。わかった。私は置き換えました:

public static String KEY_PRICE, KEY_NAME, KEY_THUMB;


static final String KEY_NAME = "product_name";
static final String KEY_PRICE = "price";

map.put("product_name", jsonObj.getString(KEY_NAME));
map.put("price", jsonObj.getString(KEY_PRICE));

于 2013-04-05T19:28:08.320 に答える