отображает только последнее изображение и текст в виде списка, используя базовый адаптер в Android - PullRequest
0 голосов
/ 28 марта 2012

В цикле for отображаются только последние данные. В базе данных, сколько строк, столько строк отображается при взятии последнего элемента все строки берут последнее изображение и текст Теперь я хочу отобразить все изображения и текст из базы данных в listview.Пожалуйста, помогите мне

enter code here
  public class ImageAdapter extends BaseAdapter {
private static final Context Context = null;
String qrimage;
Bitmap bmp, resizedbitmap;
Activity activity = null;
private static LayoutInflater inflater;

private ImageView[] mImages;
String[] itemimage;
TextView[] tv;
String itemname;
HashMap<String, String> map = new HashMap<String, String>();

public ImageAdapter(Context context, JSONArray imageArrayJson) {
    //inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  //  imageLoader=new ImageLoader(activity);
    inflater=LayoutInflater.from(context);
    this.mImages = new ImageView[imageArrayJson.length()];

    try {

        for (int i = 0; i < imageArrayJson.length(); i++) {
            JSONObject image = imageArrayJson.getJSONObject(i);
            qrimage = image.getString("itemimage");
            itemname = image.getString("itemname");
            map.put("itemname", image.getString("itemname"));


            byte[] qrimageBytes = Base64.decode(qrimage.getBytes());

            bmp = BitmapFactory.decodeByteArray(qrimageBytes, 0,
                    qrimageBytes.length);
            int width = 100;
            int height = 100;
            resizedbitmap = Bitmap.createScaledBitmap(bmp, width, height,
                    true);

            mImages[i] = new ImageView(context);
            mImages[i].setImageBitmap(resizedbitmap);

            mImages[i].setScaleType(ImageView.ScaleType.FIT_START);


            // tv[i].setText(itemname);
        }
        System.out.println(map);

    } catch (Exception e) {
        // TODO: handle exception
    }
}

public int getCount() {
    return mImages.length;
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}



public View getView(int position, View convertView, ViewGroup parent) {


    View vi=convertView;

            vi = inflater.inflate(R.layout.listview, null);


       TextView text=(TextView)vi.findViewById(R.id.text);
        ImageView image=(ImageView)vi.findViewById(R.id.image);
        image.setImageBitmap(bmp);
        text.setText(map.get("itemname"));

        return vi;


 }


}

1 Ответ

0 голосов
/ 28 марта 2012

эта строка будет хранить все в одном месте на карте:

map.put("itemname", image.getString("itemname"));

но, возможно, вы имели в виду:

map.put(itemname, image.getString("itemname"));

также у вас есть одно поле для bmp, котороесбрасывается каждый раз через цикл.у вашего getView метода есть параметр position по причине, поэтому он может индексировать в массив и находить соответствующую информацию для этого места в списке.вместо этого ваш getView получает один bmp и один itemname для всего экземпляра адаптера - не проиндексированный position, как это должно быть.

Я, вероятно, не должен быть простодавая вам код, но вот он.

public class ImageAdapter extends BaseAdapter {
  String qrimage;
  Bitmap bmp, resizedbitmap;
  Bitmap[] bmps;
  Activity activity = null;
  private LayoutInflater inflater;

  private ImageView[] mImages;
  String[] itemimage;
  TextView[] tv;
  String itemname;
  String[] itemnames;
  HashMap<String, String> map = new HashMap<String, String>();

  public ImageAdapter(Context context, JSONArray imageArrayJson) {
    //inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    //  imageLoader=new ImageLoader(activity);
    inflater=LayoutInflater.from(context);
    this.mImages = new ImageView[imageArrayJson.length()];
    this.bmps = new Bitmap[imageArrayJson.length()];
    this.itemnames = new String[imageArrayJson.length()];

    try {

      for (int i = 0; i < imageArrayJson.length(); i++) {
        JSONObject image = imageArrayJson.getJSONObject(i);
        qrimage = image.getString("itemimage");
        itemname = image.getString("itemname");
        itemnames[i] = itemname;


        byte[] qrimageBytes = Base64.decode(qrimage.getBytes());

        bmp = BitmapFactory.decodeByteArray(qrimageBytes, 0,
                                            qrimageBytes.length);
        int width = 100;
        int height = 100;
        resizedbitmap = Bitmap.createScaledBitmap(bmp, width, height,
                                                  true);
        bmps[i] = bmp;

        mImages[i] = new ImageView(context);
        mImages[i].setImageBitmap(resizedbitmap);

        mImages[i].setScaleType(ImageView.ScaleType.FIT_START);


        // tv[i].setText(itemname);
      }
      System.out.println(map);

    } catch (Exception e) {
      // TODO: handle exception
    }
  }

  public int getCount() {
    return mImages.length;
  }

  public Object getItem(int position) {
    return position;
  }

  public long getItemId(int position) {
    return position;
  }



  public View getView(int position, View convertView, ViewGroup parent) {


    View vi=convertView;

    vi = inflater.inflate(R.layout.listview, null);


    TextView text=(TextView)vi.findViewById(R.id.text);
    ImageView image=(ImageView)vi.findViewById(R.id.image);
    image.setImageBitmap(bmps[position]);
    text.setText(itemnames[position]);

    return vi;


  }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...