Android開源框架的SlidingFragment的使用示例
效果如下:

直接上代碼,留著以后用,代碼目錄結(jié)構(gòu)如下:

其中BaseFragment.java是另外5個(gè)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()); // 獲取當(dāng)前對(duì)象對(duì)應(yīng)的類名稱
return textView;
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
};
}
另外5個(gè)Fragment的代碼都一樣就是直接繼承BaseFragment.java沒(méi)有任何實(shí)現(xiàn),其他4個(gè)省略
public class Fragment1 extends BaseFragment {
}
MenuFragment.java是用于管理這幾個(gè)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要自己實(shí)現(xiàn)的方法
*
* 用于填充側(cè)滑菜單中的數(shù)據(jù)
*
* OnItemClickListener:listview里邊的點(diǎn)擊事件
*
* @author xuliugen
*
*/
public class MenuFragment extends Fragment implements OnItemClickListener {
View view;
private String tag = "MenuFragment";
/**
* 當(dāng)activity創(chuàng)建的時(shí)候加載數(shù)據(jù)
*/
@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);// 設(shè)置適配器
listView.setOnItemClickListener(this);
}
/**
* 側(cè)邊欄的靜態(tài)數(shù)據(jù)
*
* @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");
}
/**
* 用于加載側(cè)邊欄
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.i(tag, "onCreateView");
// 加載界面:側(cè)邊欄
view = LayoutInflater.from(getActivity()).inflate(R.layout.list_view,
null);
return view;
}
/**
* listview中點(diǎn)擊事件的監(jiān)聽器 選擇監(jiān)聽事件
*/
@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中的數(shù)據(jù)替換到R.id.menu_frag中 .commit();// 提交
*/
// 通過(guò)switch選擇,相當(dāng)于一個(gè)回調(diào)方法
switchFragment(baseFragment);
}
private void switchFragment(BaseFragment fragment) {
if (fragment != null) {
if (getActivity() instanceof MainActivity) {
((MainActivity) getActivity()).switchFragment(fragment);
}
}
}
}
MainActivity.java主要是用于初始化SlidingFragmentActivity的操作,設(shè)置參數(shù)等
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;
/**
* 使用滑動(dòng)菜單首先要繼承SlidingFragmentActivity,然后實(shí)現(xiàn)的一般步驟如下:
*
* 1.得到滑動(dòng)菜單
*
* 2.設(shè)置滑動(dòng)菜單是在左邊還是在右邊出來(lái)
*
* 3.設(shè)置滑動(dòng)菜單出來(lái)之后,內(nèi)容頁(yè),顯示的剩余寬度
*
* 4.設(shè)置滑動(dòng)菜單的陰影設(shè)置陰影,陰影需要在開始的時(shí)候特別淡,慢慢變暗
*
* 5.設(shè)置陰影的寬度
*
* 6.設(shè)置滑動(dòng)菜單的范圍
*
* @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);// 這里是動(dòng)態(tài)加載的頁(yè)面
// 設(shè)置content內(nèi)容中的初始值
Fragment1 fragment1 = new Fragment1();
getSupportFragmentManager()//
.beginTransaction()//
.replace(R.id.content_frag, fragment1)//
.commit();//
// 1.得到滑動(dòng)菜單
slidingMenu = getSlidingMenu();
// 2.設(shè)置滑動(dòng)菜單是在左邊還是在右邊出來(lái)(左、右、左右)
slidingMenu.setMode(SlidingMenu.LEFT);
// 3.設(shè)置滑動(dòng)菜單出來(lái)之后,內(nèi)容頁(yè),顯示的剩余寬度
slidingMenu.setBehindWidthRes(R.dimen.slidingmenu_offset);
// 4.設(shè)置滑動(dòng)菜單的陰影設(shè)置陰影,陰影需要在開始的時(shí)候特別淡,慢慢變暗
slidingMenu.setShadowDrawable(R.drawable.shadow);
// 5.設(shè)置陰影的寬度
slidingMenu.setShadowWidth(R.dimen.shadow_width);
// 6.設(shè)置滑動(dòng)菜單的范圍
// SlidingMenu.TOUCHMODE_FULLSCREEN:全屏
// SlidingMenu.TOUCHMODE_MARGIN:邊沿的時(shí)候滑動(dòng)
// SlidingMenu.TOUCHMODE_NONE:不滑動(dòng)
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
// 創(chuàng)建fragmentment
MenuFragment menuFragment = new MenuFragment();
getSupportFragmentManager() // 獲取fragment的管理者
.beginTransaction() // 開啟事物
.replace(R.id.menu_frag, menuFragment, "Menu")// 替換,將menuFragment中的數(shù)據(jù)替換到R.id.menu_frag中
.commit();// 提交
}
/**
* 方法回調(diào):在MenuFragment類中進(jìn)行調(diào)用
* 暴露替換幀布局內(nèi)容的操作
* @param fragment
*/
public void switchFragment(BaseFragment fragment) {
getSupportFragmentManager()//
.beginTransaction()//
.replace(R.id.content_frag, fragment)//
.commit();
slidingMenu.toggle();// 點(diǎn)擊之后自動(dòng)切換
}
}
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
Android使用Scroll+Fragment仿京東分類效果
這篇文章主要為大家詳細(xì)介紹了Android使用Scroll+Fragment仿京東分類效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
替換so文件來(lái)動(dòng)態(tài)替換Flutter代碼實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了替換so文件來(lái)動(dòng)態(tài)替換Flutter代碼實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Android實(shí)現(xiàn)網(wǎng)易新聞客戶端首頁(yè)效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)網(wǎng)易新聞客戶端首頁(yè)效果的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Android實(shí)現(xiàn)從本地圖庫(kù)/相機(jī)拍照后裁剪圖片并設(shè)置頭像
玩qq或者是微信的盆友都知道,這些聊天工具里都要設(shè)置頭像,一般情況下大家的解決辦法是從本地圖庫(kù)選擇圖片或是從相機(jī)拍照,然后根據(jù)自己的喜愛截取圖片,接下來(lái)通過(guò)本文給大家介紹Android實(shí)現(xiàn)從本地圖庫(kù)/相機(jī)拍照后裁剪圖片并設(shè)置頭像,需要的朋友參考下2016-02-02
Android基礎(chǔ)控件RadioGroup使用方法詳解
這篇文章主要為大家詳細(xì)介紹了Android基礎(chǔ)控件RadioGroup的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
Android異常 java.lang.IllegalStateException解決方法
這篇文章主要介紹了Android異常 java.lang.IllegalStateException解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Android開發(fā)教程之如何屏蔽View的重復(fù)點(diǎn)擊
這篇文章主要給大家介紹了關(guān)于Android開發(fā)教程之如何屏蔽View的重復(fù)點(diǎn)擊的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
Android Compose學(xué)習(xí)之繪制速度表盤
這篇文章主要為大家詳細(xì)介紹了Android Compose繪制速度表盤的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下2023-11-11
Android Popupwindow彈出窗口的簡(jiǎn)單使用方法
這篇文章主要為大家詳細(xì)介紹了Android Popupwindow彈出窗口的簡(jiǎn)單使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07

