Android 在每个网格项目上都有 (imagebutton + imageview) 的自定义 gridview

Android custom gridview having (imagebutton + imageview) on every grid items

我正在尝试将 imageButton 和 ImageView 放在网格视图项上,所以我的代码如下所示,我想做的是 创建一个 Adapter 扩展 BaseAdapter,然后创建一个 Viewholder 并将 ImageView 和 Imagebutton 放在 holder 中。 但是,没有错误,但是当打开网格视图时,应用程序再次停止。

任何线索都会有很大帮助...谢谢!!

public class DestinationActivity extends Activity implements OnClickListener, OnItemClickListener {
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.grid_view);
        GridView grid = (GridView) findViewById(R.id.gvGrid);
        myImageAdapter = new ImageAdapter(this);
        grid.setAdapter(myImageAdapter);
    }

class ViewHolder {
        int id;
        ImageView imageview;
        ImageButton button;
        }

    public class ImageAdapter extends BaseAdapter {
    private LayoutInflater mInflater;

    public ImageAdapter() {
        mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    private Context mContext;
    ArrayList<String> itemList = new ArrayList<String>();

    public ImageAdapter(Context c) {
        mContext = c;
    }

    void add(String path) {
        itemList.add(path);
    }

    @Override
    public int getCount() {
        return itemList.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) {
        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = mInflater.inflate(R.layout.image_button, null);
            holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage);
            holder.button = (ImageButton) convertView.findViewById(R.id.ibClose);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();

        }

        holder.button.setId(position);
        holder.imageview.setId(position);
        holder.imageview.setPadding(1, 1, 1, 1);
        holder.imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);
        holder.imageview.setLayoutParams(new GridView.LayoutParams(330, 330));
        Bitmap bm = decodeSampledBitmapFromUri(itemList.get(position),
                330, 330);
        holder.imageview.setImageBitmap(bm);
        holder.button.setOnClickListener(new ImageButton.OnClickListener() {

            @Override
            public void onClick(View v) {
                // // TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(), "Hello..!!", Toast.LENGTH_SHORT).show();

            }
        });

        holder.imageview.setImageBitmap(null);
        holder.id = position;
        return convertView ;

    }
    }

image_button.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

<ImageView
    android:id="@+id/thumbImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true" />

<ImageButton
    android:id="@+id/ibClose"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:src="@drawable/close_dialog" />

</RelativeLayout>

grid_view.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<GridView
    android:id="@+id/gvGrid"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF"
    android:clipToPadding="false"
    android:columnWidth="10dp"
    android:gravity="center"
    android:horizontalSpacing="0dp"
    android:numColumns="2"
    android:scrollbarStyle="outsideOverlay"
    android:stretchMode="columnWidth"
    android:verticalSpacing="5dp" 
  />
</LinearLayout>

您找不到 ImageButton 的 ID。检查适配器的 getView() 方法:

holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage);
holder.imageview = (ImageButton) convertView.findViewById(R.id.ibClose);

还有,下一次,post错误日志。

而不是下面几行:

convertView = mInflater.inflate(R.layout.gallerydeleteitems, null);
            holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage);
            holder.imageview = (ImageButton) convertView.findViewById(R.id.ibClose);

改为:

convertView = mInflater.inflate(R.layout.image_button, null); //layout name changed
holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage);
holder.button= (ImageButton) convertView.findViewById(R.id.ibClose);  //changed the name to holder.button
public class DestinationActivity extends Activity implements OnClickListener, OnItemClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.grid_view);
    GridView grid = (GridView) findViewById(R.id.gvGrid);
    myImageAdapter = new ImageAdapter(this);
    grid.setAdapter(myImageAdapter);
}

static class ViewHolder {
    ImageView imageview;
    ImageButton imageButton;
    int position;
}

public class ImageAdapter extends BaseAdapter {


    public ImageAdapter() {

    }

    private Context mContext;
    ArrayList<String> itemList = new ArrayList<String>();

    public ImageAdapter(Context c) {
        mContext = c;
    }

    void add(String path) {
        itemList.add(path);
    }

    @Override
    public int getCount() {
        return itemList.size();
    }

    @Override
    public Object getItem(int position) {

        return position;
    }

    @Override
    public long getItemId(int position) {

        return position;

    }

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

        return null;
    }
}

public View getView(int position, View convertView, final ViewGroup parent) {
    Bitmap bm = null;
    View view = convertView;
    final ViewHolder holder;
    if (convertView == null) {
        holder = new ViewHolder();
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.delete_destination, parent, false);
        holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage);
        holder.imageButton = (ImageButton) convertView.findViewById(R.id.ibClose);
        view.setTag(holder);
    } else {
        holder = (ViewHolder) view.getTag();
    }
    holder.imageButton.setId(position);
    holder.imageview.setId(position);
    try {

        bm = decodeSampledBitmapFromUri(itemList.get(position), 330, 330);

    } catch (Throwable e) {

    }
    holder.imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);
    holder.imageview.setPadding(1, 1, 1, 1);
    holder.position = position;
    holder.imageview.setImageBitmap(bm);
    return view;
}
}