仿知乎日报第八篇:点击菜单区,切换内容区ViewPager相应的页面

一.现在我们要实现一个功能,点击菜单区的控件(上面是一个LinearLayout,下面是ListView),点击上面的LinearLayout,则内容区的ViewPager会显示首页,而点击ListView的各个item,则内容区的ViewPager会显示相应的主题日报页面,比如设计日报,日常心理学,电影日报等。

         让我们先看看框架结构:

 

         LeftFragment是案发地点,你在这点击了LinearLayout(去首页)或者ListView的各个item(去各个主题日报的),这里会把编号传出去,比如点击LinearLayout会把0传出去,ListView的第一个item会把1传出去,第二个item会把传出去,以此类推。这个编号刚好就对应ViewPager的13个页面,刚好就可以用ViewPager的setCurrentItem(传过来的编号)来切换到相应的页面了。

         但是这里又有一个问题了,LeftFragment和MainFragment怎么通信呢?换而言之,怎么在LeftFragment中拿到MainFragment对象呢?我们知道,LeftFragment和MainFragment都传入了上下文MianActivity,在这里面可以创建两个方法分别拿到LeftFragment和MainFragment对象,以后这两个类相互通信就变得方便了。例如,这里可以在LeftFragment的点击事件中,mainActivity.getMainContentFragment()拿到MainFragemnet对象,然后就可以调用MainFragemnt对象的任意方法了,这里我们调用switchPage()方法,该方法里面的逻辑就是用setCurrentItem(index)切换ViewPager的各个页面。

 

 

 

 

二.具体的代码

1. LeftFragment中,LinearLayout和ListView的item的点击事件

public class LeftFragment extends BaseFragment {
 
   
 
    @Override
    protected void initListener() {
       super.initListener();
//     LinearLayout控件一点击
       mLlHome.setOnClickListener(new OnClickListener() {
          
           @Override
           public void onClick(View v) {
//            拿到MainFragment对象,调用MainFragment的switchPage,
//            传入编号0,切换到ViewPager的第0个页面,即首页
              mainActivity.getMainContentFragment().switchPage(0);
//            点击按钮后,菜单关闭
               mainActivity.getSlidingMenu().toggle();
           }
       });
//     ListView的item一点击
      
       mLvContent.setOnItemClickListener(new OnItemClickListener() {
 
           @Override
           public void onItemClick(AdapterView<?> parent, View view,
                  int position, long id) {
//            拿到MainFragment对象,调用MainFragment的switchPage,
//            传入编号item所在的位置再加1,切换到ViewPager的第position+1个页面,即各个主题日报页面         
              mainActivity.getMainContentFragment().switchPage(position +1);
              mainActivity.getSlidingMenu().toggle();
           }
       });
    }
}


2. ,为了相互通信,在MainActivity中拿到MainFragment和LeftFragment两个对象   

public class MainActivity extends SlidingFragmentActivity {
 
 
 
    public MainFragment getMainContentFragment(){
//     拿到FragmentManager对象
       FragmentManager fragmentManager = getSupportFragmentManager();
//      根据标签找到MainFragment,
//     这个标签是transaction.replace(R.id.main_content, mainContentFragment,MAIN_MENU_TAG)的第三个参数,我们之前自己设置的
       MainFragment mainContentFragment = (MainFragment)fragmentManager.findFragmentByTag(MAIN_MENU_TAG);
       return mainContentFragment;
    }
   
   
    public LeftFragment getLeftContentFragment(){
//     拿到FragmentManager对象
       FragmentManager fragmentManager = getSupportFragmentManager();
//     根据标签找到LeftFragment
       LeftFragment leftContentFragment = (LeftFragment)fragmentManager.findFragmentByTag(LEFT_MENU_TAG);
       return leftContentFragment;
    }
}


3.在MainFragment中创建一个方法来切换ViewPager的13个页面

public class MainFragment extends BaseFragment {
   
    public void switchPage(int position){
       this.selectedPosition = position;
//     根据传入的编号,切换到相应的页面
       mViewPager.setCurrentItem(position);
      
    }
   
 
}
 


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值