Dialogfragment嵌套Viewpager

来源:互联网 发布:crazepony源码 编辑:程序博客网 时间:2024/05/20 18:45
项目需要实现一个在页面底部的弹窗,里面是Viewpager实现的可以左右滑动的多页面。Viewpager其中一个页面有Listview,点其中的按钮会跳转到Viewpager另外一个子页面中,并且更新其中的内容。

首先需要实现页面底部弹窗,一开始准备使用Popupwindow + Viewpager的方法,后来搜了资料发现这里有一个android的bug,会报错“Error no view found id for fragment”。stackoverflow上有人用了view在pageradapter中的方法来解决这个问题,这里我用了Dialogfragment代替Popupwindow来解决。

以下是Dialogfragment, viewpagerAdapter和相关布局文件的代码。
//dialogfragmentpublic class CustomDialog extends DialogFragment{@Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //full screen dialog fragment        setStyle(DialogFragment.STYLE_NORMAL, R.style.popupDialog);    }@Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.dialog_shop_viewpager, container);        final ViewPager viewPager;        viewPager = (ViewPager) view.findViewById(R.id.viewpager);        List fragments = getFragments();        CustomViewpagerAdapter viewpagerAdapter = new CustomViewpagerAdapter(getChildFragmentManager(), fragments);        viewPager.setAdapter(viewpagerAdapter);        return view;    } private List getFragments(){        List fList = new ArrayList();        fList.add(CustomDialogFragment.newInstance(1));        fList.add(CustomDialogFragment.newInstance(2));        fList.add(CustomDialogFragment.newInstance(3));        return fList;    }}

//CustomViewpagerAdapterpublic class CustomViewpagerAdapter extends FragmentPagerAdapter {    private List<Fragment> fragments;    public CustomViewpagerAdapter(FragmentManager fragmentManager, List<Fragment> fragments){        super(fragmentManager);        this.fragments = fragments;    }    @Override    public Fragment getItem(int position) {        return this.fragments.get(position);    }    @Override    public int getCount() {        return this.fragments.size();    }}

//DialogFragment.xml (include a navigation)<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_alignParentBottom="true">    <include android:id="@+id/nav"        layout="@layout/nav" />    <android.support.v4.view.ViewPager        android:id="@+id/viewpager"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="#fff" /></LinearLayout>
接下来实现在Frament中的Listview,设置Adapter和
//ListViewFragmentpublic class ListViewFragment extends Fragment {public static final ListViewFragment newInstance(String sid){        ListViewFragment fragment = new ListViewFragment();        return fragment;    }@Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        final View v = inflater.inflate(R.layout.fragment_shop_winning_suggestion, container, false);//Set view, listview, adapter and data hereinitViews(v);        initDatas();        return v;    }}


0 0
原创粉丝点击