用ViewPager制作导航栏,导航栏中的内容动态添加

来源:互联网 发布:数据圈怎么登录 编辑:程序博客网 时间:2024/05/17 06:24

本功能中的导航栏一共有5个栏目,要求一页显示4个,另外一个在另一页显示,并且在友盟中设置了在线参数,当在线参数为1时,家庭相册显示,当在线参数为0时,家庭相册不显示。所以导航栏根据在线参数不同,要显示4个或5个栏目。


代码:

 @BindView(R.id.message_board)    LinearLayout messageBoard;//留言板    @BindView(R.id.album_menu)    LinearLayout albumMenu;//家庭相册    @BindView(R.id.nutrient_index)    LinearLayout nutrientIndex;//营养指数    @BindView(R.id.basket)    LinearLayout basket;//客服//馨厨问答//    @BindView(R.id.expiration_reminder)//    LinearLayout expirationReminder;//美食天地    @BindView(R.id.common_problem)    LinearLayout commonProblem;//常见问题

private List<LinearLayout> menuList;
    public void initMenuView() {        LogUtil.d(TAG,"photoAlbumIsShow="+photoAlbumIsShow);        menuList = new ArrayList<LinearLayout>();        //留言板        ViewParent vg = messageBoard.getParent();        if(vg != null){            ViewGroup group = (ViewGroup) vg;            group.removeView(messageBoard);        }        //新鲜指数        ViewParent vg2 = nutrientIndex.getParent();        if(vg != null){            ViewGroup group = (ViewGroup) vg2;            group.removeView(nutrientIndex);        }        //客服        ViewParent vg3 = basket.getParent();        if(vg != null){            ViewGroup group = (ViewGroup) vg3;            group.removeView(basket);        }        //常见问题        ViewParent vg4 = commonProblem.getParent();        if(vg != null){            ViewGroup group = (ViewGroup) vg4;            group.removeView(commonProblem);        }        //美食天地//        ViewParent vg4 = expirationReminder.getParent();//        if(vg != null){//            ViewGroup group = (ViewGroup) vg4;//            group.removeView(expirationReminder);//        }        if(photoAlbumIsShow.equals("1")){            llMenu1.addView(messageBoard,0);            //家庭相册            ViewParent vg1 = albumMenu.getParent();            if(vg != null){                ViewGroup group = (ViewGroup) vg1;                group.removeView(albumMenu);            }            llMenu1.addView(albumMenu,1);            llMenu1.addView(nutrientIndex,2);            llMenu1.addView(basket,3);            llMenu2.addView(commonProblem,0);            menuList.add(llMenu1);            menuList.add(llMenu2);        }else{            llMenu1.addView(messageBoard,0);            llMenu1.addView(nutrientIndex,1);            llMenu1.addView(basket,2);            llMenu1.addView(commonProblem,3);            menuList.add(llMenu1);            albumMenu.setVisibility(View.GONE);            llMenu2.setVisibility(View.GONE);        }        if (homeMemuAdapter == null) {            homeMemuAdapter = new HomeMemuAdapter(menuList, mContext, llMenuPoints);            menuPager.setAdapter(homeMemuAdapter);        } else {        }        menuPager.setOnPageChangeListener(new MenuPagerChangeListner());        menuPager.setCurrentItem(0);        initMenuPoints();    }    void initMenuPoints() {        llMenuPoints.removeAllViews();        for (int i = 0; i < menuList.size(); i++) {            ImageView img = new ImageView(mContext);            LinearLayout.LayoutParams margin = new LinearLayout.LayoutParams(                    LinearLayout.LayoutParams.WRAP_CONTENT,                    LinearLayout.LayoutParams.WRAP_CONTENT);            //设置每个小圆点距离左边的间距            margin.setMargins(8, 0, 0, 0);            img.setLayoutParams(new ViewGroup.LayoutParams(7, 7));            if (i == 0) {                img.setImageResource(R.drawable.point_home_sel);//                img.setImageDrawable(getResources().getDrawable(R.drawable.point_gray));//                img.setBackground(getResources().getDrawable(R.drawable.point_gray));//                img.setBackgroundColor(getResources().getColor(R.color.text_sum));            } else {                img.setImageResource(R.drawable.point_home_nor);            }        if (menuList.size() > 1) {//多个页面时显示        llMenuPoints.addView(img, margin);        }        }    }

注意:添加各个栏目到页面时,先要获取它的父控件,然后移除父控件中的view,否则会报java.lang.IllegalStateException异常。


xml布局:

<RelativeLayout                    android:layout_width="match_parent"                    android:layout_height="93dp">                    <android.support.v4.view.ViewPager                        android:id="@+id/menuPager"                        android:layout_width="match_parent"                        android:layout_height="93dp">                    </android.support.v4.view.ViewPager>                    <LinearLayout                        android:id="@+id/ll_menu_points"                        android:layout_width="wrap_content"                        android:layout_height="wrap_content"                        android:layout_alignParentBottom="true"                        android:layout_centerHorizontal="true"                        android:layout_marginBottom="9dp"                        android:orientation="horizontal" />                </RelativeLayout>                <LinearLayout                    android:id="@+id/ll_menu1"                    android:layout_width="match_parent"                    android:layout_height="93dp"                    android:gravity="center_vertical"                    android:weightSum="4"                    android:layout_gravity="center"                    android:layout_marginTop="12dp"                    android:layout_marginBottom="@dimen/dp_11"                    android:orientation="horizontal">                </LinearLayout>                <LinearLayout                    android:id="@+id/message_board"                    android:layout_width="0dp"                    android:layout_weight="1"                    android:gravity="center"                    android:layout_height="wrap_content"                    android:orientation="vertical">                    <ImageView                        android:layout_width="33dp"                        android:layout_height="33dp"                        android:src="@drawable/message_board"                        />                    <TextView                        android:layout_width="wrap_content"                        android:layout_height="wrap_content"                        android:text="@string/tft_function_message"                        android:textSize="14sp"                        android:layout_marginTop="11dp"                        android:textColor="@color/home_text"                        />                </LinearLayout>                <LinearLayout                    android:id="@+id/album_menu"                    android:layout_width="0dp"                    android:layout_weight="1"                    android:gravity="center"                    android:layout_height="wrap_content"                    android:orientation="vertical">                    <ImageView                        android:layout_width="33dp"                        android:layout_height="33dp"                        android:src="@drawable/icon_album"                        />                    <TextView                        android:layout_width="wrap_content"                        android:layout_height="wrap_content"                        android:text="家庭相册"                        android:textSize="14sp"                        android:layout_marginTop="11dp"                        android:textColor="@color/home_text"                        />                </LinearLayout>                <LinearLayout                    android:id="@+id/nutrient_index"                    android:layout_width="0dp"                    android:layout_weight="1"                    android:layout_height="wrap_content"                    android:gravity="center"                    android:orientation="vertical">                    <ImageView                        android:layout_width="33dp"                        android:layout_height="33dp"                        android:src="@drawable/nutrient_index1"                        />                    <TextView                        android:layout_width="wrap_content"                        android:layout_height="wrap_content"                        android:layout_marginTop="11dp"                        android:text="新鲜指数"                        android:textSize="14sp"                        android:textColor="@color/home_text"                        />                </LinearLayout>                <LinearLayout                    android:id="@+id/basket"                    android:layout_width="0dp"                    android:layout_weight="1"                    android:gravity="center"                    android:layout_height="wrap_content"                    android:orientation="vertical">                    <ImageView                        android:layout_width="33dp"                        android:layout_height="33dp"                        android:src="@drawable/link_question"                        />                    <TextView                        android:layout_width="wrap_content"                        android:layout_height="wrap_content"                        android:text="客服"                        android:textSize="14sp"                        android:layout_marginTop="11dp"                        android:textColor="@color/home_text"                        />                </LinearLayout>                <LinearLayout                    android:id="@+id/ll_menu2"                    android:gravity="center_vertical"                    android:weightSum="4"                    android:layout_gravity="center"                    android:layout_width="match_parent"                    android:layout_height="93dp">                </LinearLayout>                <LinearLayout                    android:id="@+id/expiration_reminder"                    android:layout_width="wrap_content"                    android:visibility="gone"                    android:gravity="center"                    android:layout_marginLeft="@dimen/dp_20"                    android:layout_height="wrap_content"                    android:orientation="vertical">                    <ImageView                        android:layout_width="33dp"                        android:layout_height="33dp"                        android:src="@drawable/delesious_food1"                        />                    <TextView                        android:layout_width="wrap_content"                        android:layout_height="wrap_content"                        android:text="美食天地"                        android:textSize="14sp"                        android:layout_marginTop="11dp"                        android:textColor="@color/home_text"                        />                </LinearLayout>                <LinearLayout                    android:id="@+id/common_problem"                    android:layout_width="0dp"                    android:layout_weight="1"                    android:layout_height="wrap_content"                    android:gravity="center"                    android:orientation="vertical">                    <ImageView                        android:layout_width="33dp"                        android:layout_height="33dp"                        android:src="@drawable/control_ic_common_question" />                    <TextView                        android:layout_width="wrap_content"                        android:layout_height="wrap_content"                        android:layout_marginTop="11dp"                        android:text="@string/common_question"                        android:textColor="@color/home_text"                        android:textSize="14sp" />                </LinearLayout>
布局中的各个子栏目,都要作为单独的布局放在大的LinearLayout外面。


adapter代码:

public class HomeMemuAdapter extends PagerAdapter {    private Context mContext;    private LinearLayout ll_menu_points;    private List<LinearLayout> linearLayoutList;    public HomeMemuAdapter(List<LinearLayout> list,Context mContext, LinearLayout ll_menu_points) {        this.linearLayoutList = list;        this.mContext = mContext;        this.ll_menu_points = ll_menu_points;    }    @Override    public int getCount() {        if(linearLayoutList.size() == 1){            return 1;        }else {            return linearLayoutList.size();        }    }    @Override    public boolean isViewFromObject(View view, Object object) {        return view == object;    }    @Override    public void destroyItem(ViewGroup container,int position,Object object){//        container.removeView(imgs.get(position%imgs.size()));//        if(position >= bannerItems.size()){//            position = position%bannerItems.size();//        }//        container.removeView(imgs.get(position));    }    public Object instantiateItem(ViewGroup container, int position){        if(position >= linearLayoutList.size()){            position = position%linearLayoutList.size();        }        LinearLayout ll= linearLayoutList.get(position);        //如果View已经在之前添加到了一个父组件,则必须先remove,否则会抛出IllegalStateException。        ViewParent vp = ll.getParent();        if(vp != null){            ViewGroup viewGroup = (ViewGroup) vp;            viewGroup.removeView(ll);        }        if(position == 0){            ll.setGravity(Gravity.CENTER_VERTICAL);        }else if(position == linearLayoutList.size()-1){            LogUtil.d("HOME","===================");        }        container.addView(ll);        return ll;    }}


0 0
原创粉丝点击