ViewPager与片段持有的GridView [英] ViewPager with Fragments holding GridView

查看:221
本文介绍了ViewPager与片段持有的GridView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个片段一个ViewPager,每个片段都有一个GridView

I have a ViewPager with two Fragments , each Fragment has a GridView

Frag1.java

Frag1.java

public class Frag1 extends Fragment{
GridView grid;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    return inflater.inflate(R.layout.frag1, container, false);
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    grid = (GridView) getActivity().findViewById(R.id.gridView1);
    grid.setAdapter(new MyAdapter());

}

private class MyAdapter extends BaseAdapter {
    private int ar []={R.drawable.ch1,R.drawable.ch2,R.drawable.ch3,R.drawable.ch4};
    private LayoutInflater inflater;


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

    @Override
    public Object getItem(int i) {
        return ar[i];
    }

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View v = view;
        ViewHolder holder = null;

        if(v == null) {
            inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.grid_layout, viewGroup, false);
            holder = new ViewHolder();
            v.setTag(holder);

        }else{
            holder = (ViewHolder) v.getTag();
        }

        holder.img = (ImageView)v.findViewById(R.id.imageView1);
        holder.img.setBackgroundResource(ar[i]);
        return v;
    }

    private class ViewHolder{
        ImageView img;
    }
}

Frag2相同Frag1但是具有两个不同的东西

Frag2 is the same as Frag1 but with two different things

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    return inflater.inflate(R.layout.frag, container, false);
}
private class MyAdapter extends BaseAdapter {
    private int ar []={R.drawable.gmc1,R.drawable.gmc2,R.drawable.gmc3,R.drawable.gmc4};
     ......
   }

这是SecondActivity其中包含ViewPager

This is SecondActivity which contain the ViewPager

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    pager = (ViewPager) findViewById(R.id.pager);
    FragmentManager fm = getSupportFragmentManager();
    adapter = new MyPagerAdapter(fm);
    pager.setAdapter(adapter);

}

 class MyPagerAdapter extends FragmentStatePagerAdapter {

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {

        Fragment frag;
        if (position == 0) {
            frag = new Frag1();
        } else {
            frag = new Frag2();
        }
        return frag;

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 2;
    }
}

问题是观的ViewPage只有一个页面(Frag2),当滚动页面就得到一个空白页
在这里输入的形象描述

The problem is ViewPage view only one page (Frag2) and when scroll the page it get a blank page

推荐答案

这是奇怪的...

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    grid = (GridView) getActivity().findViewById(R.id.gridView1);
    grid.setAdapter(new MyAdapter());

}

你为什么要寻找活动GridView的?也许你应该这样做在你的onCreateView无onActivityCreated搞乱

Why are you looking for gridView in Activity? Probably you should do this in your onCreateView without messing in onActivityCreated

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.frag, container, false);
        grid = (GridView) rootView.findViewById(R.id.gridView1);
        grid.setAdapter(new MyAdapter());
        return rootView;
}

一些解释:

您在呼唤

getActivity().findViewById(R.id.gridView1);

这是在活动中的ViewPager搜索(以及其延伸的ViewGroup)在其儿童(片段布局)。两者都呼吁gridView1,假设该网格连接只Frag1,你与此视图中创建Frag1并用CH可绘设置适配器。然后创建第二个片段Frag2,从早期的Frag1充气活动GridView中获得,仍然present在屏幕上(活着,不为空),并设置GMC适配器

which is searching in Activity in your ViewPager (and as it is extended ViewGroup) in its childrens (fragment layouts). Both are calling gridView1, assuming this grid is attached only to Frag1, you are creating Frag1 with this view and setting Adapter with ch drawables. Then second fragment Frag2 is created, get from Activity GridView inflated earlier in Frag1 and still present on the screen (alive, not null) and set gmc adapter

这篇关于ViewPager与片段持有的GridView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆