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

来源:互联网 发布:python macd函数 编辑:程序博客网 时间:2024/05/27 20:14

一.完成目标:使用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 0
原创粉丝点击