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

一.完成目标:使用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;
    }
   
}
 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值