Android开源框架的SlidingFragment的使用

效果如下:

直接上代码,留着以后用,代码目录结构如下:

其中BaseFragment.java是另外5个Fragment的基类,代码如下:

package com.xuliugen.newsclient.fragment.base;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 * Fragment的基类
 *
 * @author xuliugen
 *
 */
public class BaseFragment extends Fragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        TextView textView = new TextView(getActivity());
        textView.setText(this.getClass().getSimpleName()); // 获取当前对象对应的类名称

        return textView;
    }

    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    };

}

另外5个Fragment的代码都一样就是直接继承BaseFragment.java没有任何实现,其他4个省略

public class Fragment1 extends BaseFragment {

}

MenuFragment.java是用于管理这几个Fragment的

package com.xuliugen.newsclient.fragment;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.xuliugen.newsclient.MainActivity;
import com.xuliugen.newsclient.R;
import com.xuliugen.newsclient.fragment.base.BaseFragment;

/**
 * 继承Fragment要自己实现的方法
 *
 * 用于填充侧滑菜单中的数据
 *
 * OnItemClickListener:listview里边的点击事件
 *
 * @author xuliugen
 *
 */
public class MenuFragment extends Fragment implements OnItemClickListener {

    View view;
    private String tag = "MenuFragment";

    /**
     * 当activity创建的时候加载数据
     */
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {

        super.onActivityCreated(savedInstanceState);

        Log.i(tag, "onActivityCreated");

        ListView listView = (ListView) view.findViewById(R.id.list_view);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, android.R.id.text1,
                iniData());
        listView.setAdapter(adapter);// 设置适配器

        listView.setOnItemClickListener(this);
    }

    /**
     * 侧边栏的静态数据
     *
     * @return
     */
    private List<String> iniData() {
        List<String> list = new ArrayList<String>();
        list.add("fragment1");
        list.add("fragment2");
        list.add("fragment3");
        list.add("fragment4");
        list.add("fragment5");

        return list;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        Log.i(tag, "onCreate");
    }

    /**
     * 用于加载侧边栏
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        Log.i(tag, "onCreateView");
        // 加载界面:侧边栏
        view = LayoutInflater.from(getActivity()).inflate(R.layout.list_view,
                null);
        return view;
    }

    /**
     * listview中点击事件的监听器 选择监听事件
     */
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        BaseFragment baseFragment = null;
        switch (position) {
        case 0:
            baseFragment = new Fragment1();
            break;
        case 1:
            baseFragment = new Fragment2();
            break;
        case 2:
            baseFragment = new Fragment3();
            break;
        case 3:
            baseFragment = new Fragment4();
            break;
        case 4:
            baseFragment = new Fragment5();
            break;

        }
        /**
         * 让baseFragment替换界面
         */
        /*
         * getActivity().getSupportFragmentManager() // 获取fragment的管理者
         * .beginTransaction() // 开启事物 .replace(R.id.content_frag, baseFragment,
         * "Home")// 替换,将menuFragment中的数据替换到R.id.menu_frag中 .commit();// 提交
         */
        // 通过switch选择,相当于一个回调方法
        switchFragment(baseFragment);
    }

    private void switchFragment(BaseFragment fragment) {
        if (fragment != null) {
            if (getActivity() instanceof MainActivity) {
                ((MainActivity) getActivity()).switchFragment(fragment);
            }
        }
    }
}

MainActivity.java主要是用于初始化SlidingFragmentActivity的操作,设置参数等

package com.xuliugen.newsclient;

import android.os.Bundle;
import android.view.Window;

import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;
import com.xuliugen.newsclient.fragment.Fragment1;
import com.xuliugen.newsclient.fragment.MenuFragment;
import com.xuliugen.newsclient.fragment.base.BaseFragment;

/**
 * 使用滑动菜单首先要继承SlidingFragmentActivity,然后实现的一般步骤如下:
 *
 * 1.得到滑动菜单
 *
 * 2.设置滑动菜单是在左边还是在右边出来
 *
 * 3.设置滑动菜单出来之后,内容页,显示的剩余宽度
 *
 * 4.设置滑动菜单的阴影设置阴影,阴影需要在开始的时候特别淡,慢慢变暗
 *
 * 5.设置阴影的宽度
 *
 * 6.设置滑动菜单的范围
 *
 * @author xuliugen
 *
 */
public class MainActivity extends SlidingFragmentActivity {

    SlidingMenu slidingMenu;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);

        setBehindContentView(R.layout.menu); // 加载SlidingFragment的初始化
        setContentView(R.layout.content);// 这里是动态加载的页面

        // 设置content内容中的初始值
        Fragment1 fragment1 = new Fragment1();
        getSupportFragmentManager()//
                .beginTransaction()//
                .replace(R.id.content_frag, fragment1)//
                .commit();//

        // 1.得到滑动菜单
        slidingMenu = getSlidingMenu();

        // 2.设置滑动菜单是在左边还是在右边出来(左、右、左右)
        slidingMenu.setMode(SlidingMenu.LEFT);

        // 3.设置滑动菜单出来之后,内容页,显示的剩余宽度
        slidingMenu.setBehindWidthRes(R.dimen.slidingmenu_offset);

        // 4.设置滑动菜单的阴影设置阴影,阴影需要在开始的时候特别淡,慢慢变暗
        slidingMenu.setShadowDrawable(R.drawable.shadow);

        // 5.设置阴影的宽度
        slidingMenu.setShadowWidth(R.dimen.shadow_width);

        // 6.设置滑动菜单的范围
        // SlidingMenu.TOUCHMODE_FULLSCREEN:全屏
        // SlidingMenu.TOUCHMODE_MARGIN:边沿的时候滑动
        // SlidingMenu.TOUCHMODE_NONE:不滑动
        slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

        // 创建fragmentment
        MenuFragment menuFragment = new MenuFragment();

        getSupportFragmentManager() // 获取fragment的管理者
                .beginTransaction() // 开启事物
                .replace(R.id.menu_frag, menuFragment, "Menu")// 替换,将menuFragment中的数据替换到R.id.menu_frag中
                .commit();// 提交

    }

    /**
     * 方法回调:在MenuFragment类中进行调用
     * 暴露替换帧布局内容的操作
     * @param fragment
     */
    public void switchFragment(BaseFragment fragment) {
        getSupportFragmentManager()//
                .beginTransaction()//
                .replace(R.id.content_frag, fragment)//
                .commit();

        slidingMenu.toggle();// 点击之后自动切换
    }
}

布局文件比较简单,请参考项目源代码:

链接:http://pan.baidu.com/s/1Eu6BG 密码:uh3s

时间: 2024-10-10 18:27:22

Android开源框架的SlidingFragment的使用的相关文章

Android开源框架 Android-Universal-Image-Loader

Android开源框架Universal-Image-Loader就像图片加载守护者,为我们提供了丰富的功能特性: (1)多线程加载图像(异步或同步): (2)高度可定制化imageloader配置(线程池.图片下载器.解码器.内存和磁盘缓存.显示图像选项等): (3)每一个显示图像有许多自定义选项(存根图片,缓存开关,解码选项,位图处理和显示等): (4)支持内存和磁盘上的图像缓存(设备的文件系统和SD卡): (5)监听加载过程(包括下载进度): 下来我们详解如何配置使用Universal-I

Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解

本篇文章继续为大家介绍Universal-Image-Loader这个开源的图片加载框架,介绍的是图片缓存策略方面的,如果大家对这个开源框架的使用还不了解,大家可以看看我之前写的一篇文章Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用,我们一般去加载大量的图片的时候,都会做缓存策略,缓存又分为内存缓存和硬盘缓存,我之前也写了几篇异步加载大量图片的文章,使用的内存缓存是LruCache这个类,LRU是Least Recently Used 近

greenDao android开源框架数据库更新表的问题

最近使用greenDao当android应用升级数据库新增表或者修改表,发现数据被清空的问题 查找资料也没有找到解决方案,最后查看代码发现需要自己修改SQLiteOpenHelper 1.找到greenDao生成的DaoMaster.java文件,里面有SQLiteOpenHelper实现 2.修改DevOpenHelper类里的   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 方法 通过old

Android开源框架ViewPageIndicator和ViewPager实现Tab导航

前言: 关于使用ViewPageIndicator和ViewPager实现Tab导航,在开发社区里已经有一堆的博客对其进行了介绍,假设我还在这里写怎样去实现.那简直就是老生常谈,毫无新奇感,并且.我也不觉得自己对ViewPageIndicator的理解会比别人好,毕竟我也是看着大神的帖子.在学习实践着. 那我还写这个有啥意义呢?事实上么,就是想在这里记录下.在使用ViewPageIndicator和ViewPager实现Tab导航时,大家有可能会遇到的坑.这个坑.须要我们开发时尽量去避免的. 啥

Android进阶笔记14:RoboBinding(实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架)

1.RoboBinding RoboBinding是一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架.从简单的角度看,他移除了如addXXListener(),findViewById()这些不必要的代码,连如BufferKnife那样的InjectView都不需要,因为你的代码一般不需要依赖于这些界面组件信息.下面以一个最简单的AndroidMVVM为例. (1)layout 布局 <LinearLayout xmlns:android="

android开源框架android-async-http使用

android开源框架android-async-http使用 转:http://www.open-open.com/lib/view/open1369637365753.html         android-async-http开源框架可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来也很简单,下面做简单介绍,具体详细使用看官网:https://github.com/loopj/android-async-http 1.新建项目,去官网下载zip包,解压,打开releases文件,

Android开源框架Afinal第一篇——揭开圣女的面纱

Android开源框架Afinal第一篇——揭开圣女的面纱 分类: Android开源框架哪点事2013-09-02 14:25 260人阅读 评论(0) 收藏 举报 Afinal 这是Afinal在github的地址:https://github.com/yangfuhai/afinal Afinal这个框架主要分4块: 1.FinalDB模块:android中的orm框架,一行代码就可以进行增删改查.支持一对多,多对一等查询. 2.FinalActivity模块:android中的ioc框架

android 开源框架推荐

同事整理的 android 开源框架,个个都堪称经典.32 个赞! 1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)  JSON,图像等的异步下载: (2)  网络请求的排序(scheduling) (3)  网络请求的优先级处理 (4)  缓存 (5)  多级别取消请求 (6)  和Activity和生命周期的联动(Activity结束时同时取消所有网络请求) 2.android-async-http  项目地址:ht

Android 开源框架Universal-Image-Loader完全解析(三)---源代码解读

本篇文章主要是带大家从源码的角度上面去解读这个强大的图片加载框架,自己很久没有写文章了,感觉生疏了许多,距离上一篇文章三个月多了,确实是自己平常忙,换了工作很多东西都要去看去理解,然后加上自己也懒了,没有以前那么有激情了,我感觉这节奏不对,我要继续保持以前的激情,正所谓好记性不如烂笔头,有时候自己也会去翻看下之前写的东西,我觉得知识写下来比在脑海中留存的更久,今天就给大家来读一读这个框架的源码,我感觉这个图片加载框架确实写的很不错,读完代码自己也学到了很多.我希望大家可以先去看下Android