天天看点

slidingmenu开源效果

本文将更进一步, 在很多实际的应用场景中我们需要一个更复杂的场景,比如说需要在一个菜单选项中集成多个tab来集中显示信息。这个时候 viewpager就派上用场了。

本例中我们将通过slidingmenu + viewpager+fragment 实现带tab的slidingmenu。先看看具体的效果。

slidingmenu开源效果
slidingmenu开源效果
slidingmenu开源效果

实现步骤跟上一篇大体相同,这里着重说需要修改的地方

首先我们需要添加一个pageradapter来自动适配tab里面的fragment ,就像listview中的baseadapter差不多,只是需要实现的方法有一些区别。

slidingmenu开源效果

package com.example.slidingmenuviewpagertest.adapter;  

import java.util.list;  

import com.example.slidingmenuviewpagertest.entity.contentbean;  

import com.example.slidingmenuviewpagertest.fragment.testcontentfragment;  

import android.support.v4.app.fragment;  

import android.support.v4.app.fragmentmanager;  

import android.support.v4.app.fragmentpageradapter;  

public class contentfragmentpageradapter extends fragmentpageradapter {  

    private list<contentbean> list;  

    public contentfragmentpageradapter(fragmentmanager fm) {  

        super(fm);  

    }  

    public contentfragmentpageradapter(fragmentmanager fm,list<contentbean> list) {  

        this.list = list;  

    @override  

    public fragment getitem(int arg0) {  

        return testcontentfragment.newinstance(list.get(arg0).getcontent());  

    public int getcount() {  

        // todo auto-generated method stub  

        return list.size();  

    public charsequence getpagetitle(int position) {  

        return list.get(position).gettitle();  

}  

然后在首页fragment 中初始化viewpager

slidingmenu开源效果

package com.example.slidingmenuviewpagertest.fragment;  

import java.util.arraylist;  

import android.os.bundle;  

import android.support.v4.view.viewpager;  

import android.view.layoutinflater;  

import android.view.view;  

import android.view.viewgroup;  

import com.example.slidingmenuviewpagertest.r;  

import com.example.slidingmenuviewpagertest.adapter.contentfragmentpageradapter;  

public class homefragment extends fragment {  

    private viewpager mviewpager;  

    private static final string[] titles = {"one","two","three","four","five"};  

    private list<contentbean> list = new arraylist<contentbean>();  

    private contentfragmentpageradapter madapter;  

    public homefragment(){}  

    public view oncreateview(layoutinflater inflater, viewgroup container,  

            bundle savedinstancestate) {  

        view rootview = inflater.inflate(r.layout.fragment_home, container, false);  

        initdata();  

        findview(rootview);  

        return rootview;  

    private void initdata() {  

        for(int i=0;i<titles.length;i++){  

            contentbean cb = new contentbean();  

            cb.settitle(titles[i]);  

            cb.setcontent(titles[i]+"_"+(i+1));  

            list.add(cb);  

        }  

    private void findview(view rootview) {  

        mviewpager = (viewpager) rootview.findviewbyid(r.id.mviewpager);  

        madapter = new contentfragmentpageradapter(getactivity().getsupportfragmentmanager(),list);  

        mviewpager.setadapter(madapter);  

    public void onstart() {  

        if(madapter!=null){  

            madapter.notifydatasetchanged();  

        super.onstart();  

viewpager中的fragment

slidingmenu开源效果

import android.util.log;  

import android.widget.textview;  

public class testcontentfragment extends fragment {  

    private static final string tag = testcontentfragment.class.getsimplename();  

    private string title = "hello";  

    public static testcontentfragment newinstance(string s) {  

        testcontentfragment newfragment = new testcontentfragment();  

        bundle bundle = new bundle();  

        bundle.putstring("title", s);  

        newfragment.setarguments(bundle);  

        return newfragment;  

    public void oncreate(bundle savedinstancestate) {  

        log.d(tag, "testcontentfragment-----oncreate");  

        bundle args = getarguments();  

        if(args!=null){  

            title = args.getstring("title");  

        super.oncreate(savedinstancestate);  

         view rootview = inflater.inflate(r.layout.fragment_test_content, container, false);  

         findview(rootview);  

         return rootview;  

        textview txtlabel = (textview) rootview.findviewbyid(r.id.txtlabel);  

        txtlabel.settext(title);  

testcontentfragment 布局文件 fragment_test_content.xml

slidingmenu开源效果

<?xml version="1.0" encoding="utf-8"?>  

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"  

    android:layout_width="match_parent"  

    android:layout_height="match_parent" >  

    <textview  

        android:id="@+id/txtlabel"  

        android:layout_width="wrap_content"  

        android:layout_height="wrap_content"  

        android:layout_centerinparent="true"  

        android:text="pages view"  

        android:textsize="16dp" />  

    <imageview  

        android:layout_below="@id/txtlabel"  

        android:layout_centerhorizontal="true"  

        android:layout_margintop="10dp"  

        android:src="@drawable/ic_launcher" />  

</relativelayout>  

首页fragment 布局文件 fragment_home.xml

slidingmenu开源效果

    <android.support.v4.view.viewpager  

        android:id="@+id/mviewpager"  

        android:layout_width="match_parent"  

        android:layout_height="wrap_content" >  

        <android.support.v4.view.pagertabstrip      

            android:id="@+id/pagertab"      

            android:layout_width="wrap_content"      

            android:layout_height="wrap_content"      

            android:layout_gravity="top"/>      

<!--         <android.support.v4.view.pagertitlestrip  

            android:id="@+id/mpagertitlestrip"  

            android:layout_width="match_parent"  

            android:layout_height="wrap_content"  

            android:layout_gravity="top" /> -->  

    </android.support.v4.view.viewpager>  

主activity跟之前没有变化

slidingmenu开源效果

package com.example.slidingmenuviewpagertest;  

import android.annotation.suppresslint;  

import android.support.v4.app.fragmenttransaction;  

import android.view.menu;  

import android.view.menuitem;  

import com.example.slidingmenuviewpagertest.fragment.communityfragment;  

import com.example.slidingmenuviewpagertest.fragment.findpeoplefragment;  

import com.example.slidingmenuviewpagertest.fragment.homefragment;  

import com.example.slidingmenuviewpagertest.fragment.menufragment;  

import com.example.slidingmenuviewpagertest.fragment.menufragment.slmenulistonitemclicklistener;  

import com.example.slidingmenuviewpagertest.fragment.pagesfragment;  

import com.example.slidingmenuviewpagertest.fragment.photosfragment;  

import com.example.slidingmenuviewpagertest.fragment.whatshotfragment;  

import com.jeremyfeinstein.slidingmenu.lib.slidingmenu;  

import com.jeremyfeinstein.slidingmenu.lib.app.slidingfragmentactivity;  

public class mainactivity extends slidingfragmentactivity implements slmenulistonitemclicklistener{  

    private slidingmenu mslidingmenu;  

    @suppresslint("newapi")  

        settitle("home");  

//      settitle(r.string.sliding_title);  

        setcontentview(r.layout.frame_content);  

        //set the behind view  

        setbehindcontentview(r.layout.frame_menu);  

        // customize the slidingmenu  

        mslidingmenu = getslidingmenu();  

//      mslidingmenu.setsecondarymenu(r.layout.frame_menu); 设置右侧菜单的布局文件  

//      mslidingmenu.setshadowwidth(5);  

//      mslidingmenu.setbehindoffset(100);  

        mslidingmenu.setshadowdrawable(r.drawable.drawer_shadow);//设置阴影图片  

        mslidingmenu.setshadowwidthres(r.dimen.shadow_width); //设置阴影图片的宽度  

        mslidingmenu.setbehindoffsetres(r.dimen.slidingmenu_offset); //slidingmenu划出时主页面显示的剩余宽度  

        mslidingmenu.setfadedegree(0.35f);  

        //设置slidingmenu 的手势模式  

        //touchmode_fullscreen 全屏模式,在整个content页面中,滑动,可以打开slidingmenu  

        //touchmode_margin 边缘模式,在content页面中,如果想打开slidingmenu,你需要在屏幕边缘滑动才可以打开slidingmenu  

        //touchmode_none 不能通过手势打开slidingmenu  

        mslidingmenu.settouchmodeabove(slidingmenu.touchmode_margin);  

        //设置 slidingmenu 内容  

        fragmenttransaction fragmenttransaction = getsupportfragmentmanager().begintransaction();  

        menufragment menufragment = new menufragment();  

        fragmenttransaction.replace(r.id.menu, menufragment);  

        fragmenttransaction.replace(r.id.content, new homefragment());  

        fragmenttransaction.commit();  

        //使用左上方icon可点,这样在onoptionsitemselected里面才可以监听到r.id.home  

        getactionbar().setdisplayhomeasupenabled(true);  

    public boolean oncreateoptionsmenu(menu menu) {  

        // inflate the menu; this adds items to the action bar if it is present.  

        getmenuinflater().inflate(r.menu.main, menu);  

        return true;  

    public boolean onoptionsitemselected(menuitem item) {  

        switch (item.getitemid()) {  

        case android.r.id.home:  

            toggle(); //动态判断自动关闭或开启slidingmenu  

//          getslidingmenu().showmenu();//显示slidingmenu  

//          getslidingmenu().showcontent();//显示内容  

            return true;  

        return super.onoptionsitemselected(item);  

    public void selectitem(int position, string title) {  

        // update the main content by replacing fragments    

        fragment fragment = null;    

        switch (position) {    

        case 0:    

            fragment = new homefragment();    

            break;    

        case 1:    

            fragment = new findpeoplefragment();    

        case 2:    

            fragment = new photosfragment();    

        case 3:    

            fragment = new communityfragment();    

        case 4:    

            fragment = new pagesfragment();    

        case 5:    

            fragment = new whatshotfragment();    

        default:    

        }    

        if (fragment != null) {    

            fragmentmanager fragmentmanager = getsupportfragmentmanager();  

            fragmentmanager.begintransaction()    

                    .replace(r.id.content, fragment).commit();    

            // update selected item and title, then close the drawer    

            settitle(title);  

            mslidingmenu.showcontent();  

        } else {    

            // error in creating fragment    

            log.e("mainactivity", "error in creating fragment");    

继续阅读