您的位置:首页 > 大数据 > 人工智能

仿知乎日报第四篇:MainActivity使用SlidingMenu开源项目完成基本的结构

2016-09-19 15:44 363 查看
一.完成目标:使用SlidingMenu开源项目实现向左滑出现菜单的效果。



二.具体代码

1.菜单区的布局,只有一个FrameLayout,之后会用LeftFragment替代掉(leftcontent.xml)

<?xml version="1.0"encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/left_content"
android:layout_width="match_parent"
android:layout_height="match_parent" >

</FrameLayout>


2. 内容区的布局,只有一个FrameLayout,之后会用MainFragment替代掉(maincontent.xml)

<?xml version="1.0"encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main_content"
>

</FrameLayout>


3.继承SlidingFragmentActivity,将两个布局放到菜单区,内容区,并为SlidingMenu进行一些设置(MainActivity.java)

public class MainActivity extends SlidingFragmentActivity {

private static final String MAIN_MENU_TAG = "MAIN_MENU_TAG";
private static final String LEFT_MENU_TAG = "LEFT_MENU_TAG";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
initView();
initData();

}

private void initData() {
FragmentManager fragmentManager =getSupportFragmentManager();
FragmentTransaction transaction =fragmentManager.beginTransaction();
MainContentFragment mainContentFragment = newMainContentFragment();
transaction.replace(R.id.main_content,mainContentFragment,MAIN_MENU_TAG);

LeftContentFragment leftContentFragment  = new LeftContentFragment();
transaction.replace(R.id.left_content,leftContentFragment,LEFT_MENU_TAG);
transaction.commit();

}

privatevoid initView() {
//     设置内容区的布局
setContentView(R.layout.maincontent);
//        设置菜单区的布局
setBehindContentView(R.layout.leftcontent);
SlidingMenu slidingMenu = getSlidingMenu();
//        只显示左侧的菜单
slidingMenu.setMode(SlidingMenu.LEFT);
//        屏幕的任何地方滑动都能划出菜单
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
//        滑出菜单后,留给内容区的部分只有100
slidingMenu.setBehindOffset(100);

}
public MainContentFragment getMainContentFragment(){
FragmentManager fragmentManager = getSupportFragmentManager();
MainContentFragment mainContentFragment =(MainContentFragment) fragmentManager.findFragmentByTag(MAIN_MENU_TAG);
return mainContentFragment;
}

public LeftContentFragment getLeftContentFragment(){
FragmentManager fragmentManager = getSupportFragmentManager();
LeftContentFragment leftContentFragment =(LeftContentFragment) fragmentManager.findFragmentByTag(LEFT_MENU_TAG);
return leftContentFragment;
}
@Override
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;
}

}


4.

1)创建两个fragment,分别为LeftFragment,MainFragment,这两个有一些共性,所以可以抽出一个父Fragment。(BaseFragment.java)

public abstract class BaseFragment extends Fragment {
private View  root;
protected MainActivity   mainActivity;
/*
* 在这个方法中做一些初始化的工作
*/
@Override
public void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
//     拿到所在的上下文Context,即MainActivity(Activity类是继承于Context的)
mainActivity = (MainActivity)getActivity();
}

/*
* 在这个方法中加载fragment的布局
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
root = initView();
returnroot;
}

/**
* initView设置为抽象方法,则子fragment都必须实现initView方法,并在该方法内实现各自的布局
*/
protected abstract View initView();

/*
* 该方法内可以加载数据,初始化事件
*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
initData();
initListener();
super.onActivityCreated(savedInstanceState);
}

/**
* 子fragment可以根据需求覆盖
*/
protected void initListener() {
// TODO自动生成的方法存根

}
/**
* 子fragment可以根据需求覆盖
*/
protected void initData() {
// TODO自动生成的方法存根

}

}


2)为了方便管理,可以创建一个fragment包,这几个fragment都放在这个包里面



3)创建LeftFragment (LeftFragment.java)

public class LeftFragment extends BaseFragment {

@Override
protected View initView() {
// TODO自动生成的方法存根
return null;
}

}


4)创建MianFrament (MainFragement.java)

public class MainFragment extends BaseFragment {

@Override
protected View initView() {
// TODO自动生成的方法存根
return null;
}

}


5)前面创建的两个布局,里面的两个FrameLayout分别用LeftFragment,MainFragment来代替

public class MainActivity extends SlidingFragmentActivity {

private static final String MAIN_MENU_TAG = "MAIN_MENU_TAG";
private static final String LEFT_MENU_TAG = "LEFT_MENU_TAG";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
initView();
initData();

}

private void initData() {
//      拿到FragmentManager对象
FragmentManager fragmentManager =getSupportFragmentManager();
//     用FragmentManager拿到FragmentTransaction对象
FragmentTransaction transaction = fragmentManager.beginTransaction();
MainFragment mainContentFragment = new MainFragment();
//     用MainFragment来代替Framelayout,注意:第三个参数MAIN_MENU_TAG是为了findFragmentByTag找到MainFragment
transaction.replace(R.id.main_content,mainContentFragment,MAIN_MENU_TAG);

LeftFragment leftContentFragment  = new LeftFragment();
//     用LeftFragment来代替Framelayout,注意:第三个参数LEFT_MENU_TAG是为了findFragmentByTag找到LeftFragment
transaction.replace(R.id.left_content,leftContentFragment,LEFT_MENU_TAG);

//     提交
transaction.commit();

}

private void initView() {
//     设置内容区的布局
setContentView(R.layout.maincontent);
//        设置菜单区的布局
setBehindContentView(R.layout.leftcontent);
SlidingMenu slidingMenu = getSlidingMenu();
//        只显示左侧的菜单
slidingMenu.setMode(SlidingMenu.LEFT);
//        屏幕的任何地方滑动都能划出菜单
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
//        滑出菜单后,留给内容区的部分只有100
slidingMenu.setBehindOffset(100);

}
public MainFragment getMainContentFragment(){
FragmentManager fragmentManager = getSupportFragmentManager();
MainFragment mainContentFragment = (MainFragment)fragmentManager.findFragmentByTag(MAIN_MENU_TAG);
return mainContentFragment;
}

public LeftFragment getLeftContentFragment(){
FragmentManager fragmentManager = getSupportFragmentManager();
LeftFragment leftContentFragment = (LeftFragment)fragmentManager.findFragmentByTag(LEFT_MENU_TAG);
return leftContentFragment;
}
@Override
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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息