GridView中的图像下方的文本

时间:2013-07-31 06:49:51

标签: android android-gridview

我正在尝试在网格视图中添加我的图像下面的文本。我收到Null point Exception错误。

以下是布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:orientation="vertical"
   android:gravity="center_horizontal"
   android:background="#000080">

   <imageview android:id="@+id/grid_item_image"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">
   </imageview>

   <textview android:id="@+id/grid_item_text"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="TextView"
      android:gravity="center_horizontal"
      android:textColor="#000000">
   </textview>

</LinearLayout>

ImageAdapter类的代码如下:

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;

public class ImageAdapter extends BaseAdapter {
    Context mContext;
    private LayoutInflater mInflater;

    // Keep all Images in array
    public Integer[] mThumbIds = {
            R.drawable.image1, R.drawable.image2,
            R.drawable.image6, R.drawable.image3,
            R.drawable.image5, R.drawable.image4



    };

    // Constructor
    public ImageAdapter(Context c){
        mContext = c;
        mInflater = LayoutInflater.from(c);
    }

    public ImageAdapter(Residential residential) {
        // TODO Auto-generated constructor stub
    }

    @Override
    public int getCount() {
        return mThumbIds.length;
    }

    @Override
    public Object getItem(int position) {
        return mThumbIds[position];
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

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

        View MyView = convertView;

        if (convertView == null)
        {

        convertView = mInflater.inflate(R.layout.grid_item, 
                    parent,false);

        TextView tv = (TextView)MyView.findViewById(R.id.grid_item_text);
        tv.setText("Item");

        ImageView imageView = (ImageView)MyView.findViewById(R.id.grid_item_image);

        //ImageView imageView = new ImageView(mContext);
        imageView.setImageResource(mThumbIds[position]);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setLayoutParams(new GridView.LayoutParams(190, 100));
        }
        return MyView;
    }

}

它在下面的行中抛出null异常错误:

convertView = mInflater.inflate(R.layout.grid_item, 
                    parent,false);

我尝试了各种选项,但都给出了相同的结果

LayoutInflater li = ((Activity) mContext).getLayoutInflater();

LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

请建议如何解决此问题。感谢。

3 个答案:

答案 0 :(得分:1)

你的评论是你说的

    Residential is the gridview xml file

所以使用

convertView = mInflater.inflate(R.layout.resedential, 
                parent,false);  

还可以使用convertview初始化您的视图

TextView tv = (TextView)convertView.findViewById(R.id.grid_item_text);

return convertView

您还应该考虑使用ViewHolder

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

使用ViewHolder

static class ViewHolder
{
       TextView textview;
       ImageView imageView;
}

getView

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

    ViewHolder vh;

    if (convertView == null)
    {
    vh = new ViewHolder();
    convertView = mInflater.inflate(R.layout.resedential, 
                parent,false);
    vh.tv = (TextView)convertView.findViewById(R.id.grid_item_text)
    vh.imageView = (ImageView)convertView.findViewById(R.id.grid_item_image);
    convertView.setTag(vh); 
    }
    else 
    { 
    vh = (ViewHolder) convertView.getTag();  
    }       
    vh.tv.setText("Item");   
    vh.imageView.setImageResource(mThumbIds[position]);
    vh.imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    vh.imageView.setLayoutParams(new GridView.LayoutParams(190, 100));

    return convertView;
}

答案 1 :(得分:0)

由于MyView指向convertView,它可能为null,但在分配新视图后,您没有使用新的convertView更新MyView。

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

        View MyView = convertView;

        if (convertView == null)
        {

        convertView = mInflater.inflate(R.layout.grid_item, 
                    parent,false);
MyView = convertView;
        TextView tv = (TextView)MyView.findViewById(R.id.grid_item_text);
        tv.setText("Item");

        ImageView imageView = (ImageView)MyView.findViewById(R.id.grid_item_image);

        //ImageView imageView = new ImageView(mContext);
        imageView.setImageResource(mThumbIds[position]);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setLayoutParams(new GridView.LayoutParams(190, 100));
        }
        return MyView;
    }

答案 2 :(得分:0)

这就是膨胀的方式:

static View inflate(Context context, int resource, ViewGroup root)
Inflate a view from an XML resource.

所以你传递了错误的参数......

所以

convertView= mInflater.inflate(getBaseContext(),R.layout.grid_item,parent);