Android开源框架的SlidingFragment的使用示例
作者:徐刘根 发布时间:2021-06-18 09:37:31
标签: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();// 点击之后自动切换
}
}
来源:https://blog.csdn.net/xlgen157387/article/details/46430233
0
投稿
猜你喜欢
- C++中,对于任意一个类,都会为我们提供4个默认的成员函数(如果我们不显示的去声明)——构造函数、析
- 本文实例为大家分享了Qt实现计算器功能的具体代码,供大家参考,具体内容如下该计算器主要通过lineEdit获取和显示数字,通过tablevi
- 本文实例讲述了Android编程实现canvas绘制饼状统计图功能。分享给大家供大家参考,具体如下:本例的目的是实现一个简单的饼状统计图,效
- 一、简介当我们没有在子类构造函数中写上 base(),默认会先调用父类中无参的构造函数,再调用子类。当在有参构造函数后写上base时,只调用
- 本文实例讲述了Android编程判断网络连接是否可用的方法。分享给大家供大家参考,具体如下:为了提高用户体验,我们在开发 android 应
- 使用限定符在平板上面大多数时候采用的双页的模式,程序会在左侧列表上显示一个包含子项列表,右侧的面版会显示详细的内容的因为平板具有足够大的屏幕
- 本文适合有 Java 基础的人群作者:DJL-LankingHelloGitHub 推出的《讲解开源项目》系列。有幸邀请到了亚马逊 + Ap
- 本文实例讲述了C#实现的算24点游戏算法。分享给大家供大家参考。具体如下:using System;using System.Collect
- 我就废话不多说了,大家还是直接看代码吧~ string url = "https://cloud.soei.com.cn/smsa
- final 可以适用的范围:修饰类:使用这种修饰符的类无法被继承修饰函数:被修饰的不能被重写修饰属性:1.final修饰的成员变量是常量,值
- Spring Cloud Gateway介绍前段时间刚刚发布了Spring Boot 2正式版,Spring Cloud Gateway基于
- 简介本文主要讲解如何用java Selenium 控制鼠标在浏览器上的操作方法。主要列举的代码示例,无图显示。可以自己上代码执行操作看效果。
- spring中实例化bean无效在做Struts2和Spring整合时遇到Spring实例化无效的情况,Action中代码如下public
- 本文实例讲述了C#日期格式字符串的相互转换操作。分享给大家供大家参考,具体如下:方法一:Convert.ToDateTime(string)
- 利用栈实现一个简易计算器(Java实现),供大家参考,具体内容如下一、思路分析当我们输入一个类似于“7*2+100-5+
- 本文实例讲述了Android编程实现横竖屏切换时不销毁当前activity和锁定屏幕的方法。分享给大家供大家参考,具体如下:首先在Maini
- 在阅读这篇文章之前,大家可以先看下《Java多线程atomic包介绍及使用方法》,了解atomic包的相关内容。一、何谓Atomic?Ato
- springMVC是spring的一个模块,专门做web的。SpringMVC请求处理过程:请求发送,根据url-pattern,转发发送给
- 前言最近碰到了Mybatis一对多查询的场景,在这里总结对比下常见的两种实现方式。本文以常见的订单表和订单详情表来举例说明;数据库表准备订单
- 我们将会从以下的几点理解java线程的一些概念:线程的基本概念和优劣之处创建一个线程的两种方式线程的属性线程的状态synchronized可