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