Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 仅设置GridView中的可单击项_Android_Gridview_Onclick - Fatal编程技术网

Android 仅设置GridView中的可单击项

Android 仅设置GridView中的可单击项,android,gridview,onclick,Android,Gridview,Onclick,我有一个包含多个项目的gridview。它们是可点击的,但正如您在图片中看到的,当我按下gridview项目的任何部分时,所有内容都被选中。我的目标是使包含图像和文本视图的布局(在GridView的每个项目中)只可单击 其次,我还注意到“点击效果”出现在布局后面,而不是前面(查看图片)。有没有办法改变这一点 gridview设置如下: mItems.add(new GridViewItem(resources.getDrawable(R.drawable.sman_package), getS

我有一个包含多个项目的gridview。它们是可点击的,但正如您在图片中看到的,当我按下gridview项目的任何部分时,所有内容都被选中。我的目标是使包含图像和文本视图的布局(在GridView的每个项目中)只可单击

其次,我还注意到“点击效果”出现在布局后面,而不是前面(查看图片)。有没有办法改变这一点

gridview设置如下:

mItems.add(new GridViewItem(resources.getDrawable(R.drawable.sman_package), getString(R.string.pick_package)));
mItems.add(new GridViewItem(resources.getDrawable(R.drawable.sregister), getString(R.string.register)));
mAdapter = new GridViewAdapter(this, mItems);
// initialize the GridView
final GridView gridView = (GridView) this.findViewById(R.id.gridView);
gridView.setAdapter(mAdapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (position) {
            case 0:

                break;
            case 1:

                break;
        }



    }
});
GridViewAdapter
如下所示:

public class GridViewAdapter extends BaseAdapter {
    private Context mContext;
    private List<GridViewItem> mItems;


    public GridViewAdapter(Context context, List<GridViewItem> items) {
        mContext = context;
        mItems = items;
    }

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

    @Override
    public Object getItem(int position) {
        return mItems.get(position);
    }

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

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

        if(convertView == null) {
            // inflate the GridView item layout
            LayoutInflater inflater = LayoutInflater.from(mContext);
            convertView = inflater.inflate(R.layout.gridview_item, parent, false);

            // initialize the view holder
            viewHolder = new ViewHolder();
            viewHolder.ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon);
            viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
            //viewHolder.LayoutItem = (LinearLayout) convertView.findViewById(R.id.layoutItem);


            convertView.setTag(viewHolder);
        } else {
            // recycle the already inflated view
            viewHolder = (ViewHolder) convertView.getTag();
        }

        // update the item view
        GridViewItem item = mItems.get(position);
        viewHolder.ivIcon.setImageDrawable(item.icon);
        viewHolder.tvTitle.setText(item.title);

        return convertView;
    }

    /**
     * The view holder design pattern prevents using findViewById()
     * repeatedly in the getView() method of the adapter.
     *
     */
    private static class ViewHolder {
        ImageView ivIcon;
        TextView tvTitle;

    }
}
公共类GridViewAdapter扩展了BaseAdapter{
私有上下文;
私人名单;
公共GridViewAdapter(上下文、列表项){
mContext=上下文;
mItems=项目;
}
@凌驾
public int getCount(){
返回mItems.size();
}
@凌驾
公共对象getItem(int位置){
返回mItems.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
持票人持票人;
if(convertView==null){
//展开GridView项布局
LayoutFlater充气机=LayoutFlater.from(mContext);
convertView=充气机。充气(R.layout.gridview_项,父项,false);
//初始化视图保持架
viewHolder=新的viewHolder();
viewHolder.ivIcon=(ImageView)convertView.findViewById(R.id.ivIcon);
viewHolder.tvTitle=(TextView)convertView.findViewById(R.id.tvTitle);
//viewHolder.LayoutItem=(LinearLayout)convertView.findViewById(R.id.LayoutItem);
convertView.setTag(viewHolder);
}否则{
//回收已膨胀的视图
viewHolder=(viewHolder)convertView.getTag();
}
//更新项目视图
GridViewItem项=mItems.get(位置);
viewHolder.ivIcon.setImageDrawable(item.icon);
viewHolder.tvTitle.setText(item.title);
返回视图;
}
/**
*视图保持架设计模式阻止使用findViewById()
*在适配器的getView()方法中重复。
*
*/
私有静态类视图持有者{
ImageView-ivIcon;
文本视图标题;
}
}
我检查了好几篇帖子,但仍然没有找到合适的解决方案。如果你们中有人知道如何解决这个问题,我将非常感激:)

试试这个


在gridviewadapter中将onclicklistener设置为ivicon和ivtitle,而不是在gridview上设置onitemclicklistener

否,这不是一个解决方案:)
public class GridViewAdapter extends BaseAdapter {
    private Context mContext;
    private List<GridViewItem> mItems;


    public GridViewAdapter(Context context, List<GridViewItem> items) {
        mContext = context;
        mItems = items;
    }

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

    @Override
    public Object getItem(int position) {
        return mItems.get(position);
    }

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

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

        if(convertView == null) {
            // inflate the GridView item layout
            LayoutInflater inflater = LayoutInflater.from(mContext);
            convertView = inflater.inflate(R.layout.gridview_item, parent, false);

            // initialize the view holder
            viewHolder = new ViewHolder();
            viewHolder.ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon);
            viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
            //viewHolder.LayoutItem = (LinearLayout) convertView.findViewById(R.id.layoutItem);


            convertView.setTag(viewHolder);
        } else {
            // recycle the already inflated view
            viewHolder = (ViewHolder) convertView.getTag();
        }

        // update the item view
        GridViewItem item = mItems.get(position);
        viewHolder.ivIcon.setImageDrawable(item.icon);
        viewHolder.tvTitle.setText(item.title);

        return convertView;
    }

    /**
     * The view holder design pattern prevents using findViewById()
     * repeatedly in the getView() method of the adapter.
     *
     */
    private static class ViewHolder {
        ImageView ivIcon;
        TextView tvTitle;

    }
}