ошибка при создании пользовательского макета при просмотре списка с использованием базового адаптера в Android - PullRequest
0 голосов
/ 28 марта 2012

Я получаю изображения и имена из базы данных mysql через URL, используя json.Я могу просматривать изображения в виде списка, но не имена.я хочу создать собственное представление внутри метода getview. но создать обычное представление это показывает ошибку в logcat .. пожалуйста, посмотрите мой код и измените мой код, отправьте мне

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

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

public ImageAdapter(Context context, JSONArray imageArrayJson) {
    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"));
            System.out.println(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);

            inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            // tv[i].setText(itemname);
        }

    } 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 class ViewHolder {
        TextView text;
    }


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



//  return mImages[position];
      ViewHolder holder = new ViewHolder();
        if (convertView == null){
            convertView = inflater.inflate(R.layout.listview, null);
            holder.text = (TextView)convertView.findViewById(R.id.text);

            convertView.setTag(holder);
        }else{
            holder = (ViewHolder)convertView.getTag();
        }

        holder.text.setText(map.get("itemname"));
        return convertView;
    }


}

Layout xml

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content">
   <ImageView
  android:id="@+id/image"
  android:layout_width="50dip"
  android:layout_height="50dip" android:src="@drawable/stub"    
 android:scaleType="centerCrop"/>
 <TextView
  android:id="@+id/text"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_weight="1"  android:textSize="20dip" 
  android:layout_marginLeft="10dip"/>
 </LinearLayout>

Я хочу добавить изображения в viewview и имя элемента в textview.наконец я хочу изображения и имя элемента в виде списка

Ответы [ 3 ]

1 голос
/ 28 марта 2012
  1. Не используйте утверждение,

    приватная статическая переменная LayoutInflater = null;

Просто оставьте это как

private static LayoutInflater inflater;
  1. Не помещайте инфлятор в цикл for ... и блок catch try {}. если оно вызывает исключение, ваш инфлятор не будет инициализирован.

  2. Инициализировать инфлятор в первой строке самого конструктора.

  3. Альтернативное использование,

    inflater = LayoutInflater.from (context);

В вашем конструкторе

  1. Проверьте, как вы создаете хэш-карту, она ошибочна.
  2. Вашему владельцу требуется Imageview, который необходимо обновить вместе с TextView в getView ().
1 голос
/ 28 марта 2012

попробуй с

convertView = activity.getLayoutInflater().inflate(R.layout.listview, null);
0 голосов
/ 28 марта 2012

Я предлагаю вам передать String Array вместо JSONArray в класс ImageAdapter. Получите все значения перед вызовом setAdapter, сохраните их в массив String и передайте его. Вам необходимо соответственно изменить класс ImageAdapter.

...