解决ViewPager中添加fragment,fragment中使用GridView控件不显示,控件重叠的问题

本文介绍了解决在ViewPager和Fragment组合使用时,GridView显示不正常或与标题栏重叠的问题。通过调整GridView的item尺寸并改变布局类型,确保了正确的显示效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个主Activity中使用ViewPager,ViewPager中添加多个Fragment,在Fragment中使用GridView时控件不显示,或是显示重叠的问题解决:

 

首先排查viewpager设置了适配器,并且适配器中有数据,有一种情况是gridview的item过小,被标题栏挡住了。可以设置图片宽高为具体值比如200dp。这样就可以确定是否被标题栏挡住。

下面展示gridview数据适配的使用方法:

继承BaseAdapter,重点是getView方法,和列表类适配器类似

public class ImageAdapter extends BaseAdapter {

    private Context context;
    private LayoutInflater layoutInflater;
    
    String[] names = {"首页", "首页", "首页", "首页", "首页", "首页", "首页", "首页"};
    int[] icons = {R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher
            , R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher};

    public ImageAdapter(Context context) {
        this.context = context;
        layoutInflater = LayoutInflater.from(context);
    }

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

    @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) {
        ViewHolder holder = null;
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.item_grid_view, null);
            holder = new ViewHolder();
            holder.gvImage = convertView.findViewById(R.id.id_gv_img);
            holder.gvName = convertView.findViewById(R.id.id_gv_name);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.gvName.setText(names[position]);
        holder.gvImage.setImageResource(icons[position]);

        return convertView;
    }

    static class ViewHolder {
        public ImageView gvImage;
        public TextView gvName;
    }
}

 

使用:

如果是在fragment中,要在onCreateView中设置

@Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_one, container, false);
        id_GridView = view.findViewById(R.id.id_GridView);
        id_GridView.setAdapter(new ImageAdapter(getActivity()));

        id_GridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getContext(), "点击了第" + position + "个", Toast.LENGTH_SHORT).show();
            }
        });
        return view;
    }

 

此时可以看到item会显示出来,但仍有item重叠的情况,比如item叠加在标题栏上

此问题的解决方案:

将主布局由ConstraintLayout改为LinearLayout即可,原因是因为ConstraintLayout没有使用熟练,缺少设置项。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值