在android中使用基本适配器的listview创建自定义布局时出错

时间:2012-03-28 04:31:26

标签: android android-layout baseadapter

我使用json通过url从mysql数据库中获取图像和名称。我可以在列表视图中查看图像。但不能查看名称。我想在getview方法中创建自定义视图。但是创建cusotom视图它在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;
    }


}

布局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>

我想将imageview和itemname中的mimages附加到textview。最后我想要mimages和itemname作为listview

3 个答案:

答案 0 :(得分:1)

  1. 不要使用声明

    private static LayoutInflater inflater = null;

  2. 将其保留为

    private static LayoutInflater inflater;
    
    1. 不要将充气机放在for ...循环和try {} catch块中。如果它抛出异常,你的充气机将不会被初始化。

    2. 在构造函数本身的第一行初始化充气器。

    3. 交替使用,

      inflater = LayoutInflater.from(context);

    4. 在你的构造函数中,

      1. 检查您创建hashmap的方式,这是错误的。
      2. 您的持有者需要一个Imageview,您需要在getView()中使用TextView进行更新。

答案 1 :(得分:1)

尝试

convertView = activity.getLayoutInflater().inflate(R.layout.listview, null);

答案 2 :(得分:0)

我建议你将String Array而不是JSONArray传递给ImageAdapter类。在调用setAdapter之前获取所有值,将它们存储到String数组中并传递它。您需要相应地更改ImageAdapter类。