热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Tab系列02PagerAdapter+Fragment

Tab系列02PagerAdapter+F

主要利用了Fragment在主内容界面

对Fragment的add,hide等事务操作。(FragmentTraction  )

注意:不要使用一个全局事务: FragmentTrasction 提交。

package com.example.tabdemo01;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends FragmentActivity {
    TextView tv_header;
    FragmentManager fmManager ;
    Fragment fm1;
    Fragment fm2;
    Fragment fm3;
    Fragment fm4;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        //将所有的Fragment 隐藏
        onweixin(null);
    }

    public void initView() {
        tv_header = (TextView) findViewById(R.id.tv_headr);
        fmManager =  getSupportFragmentManager();

    }
    public void onweixin(View view){    
        tv_header.setText("微信");
    }
    public void onFriend(View view){
        tv_header.setText("好友");
    }
    public void onContacts(View view){
        tv_header.setText("联系人");

    }
    public void onMyself(View view){
        tv_header.setText("我的");


    }


    public void selectionTab(int index) {
        FragmentTransaction  ft = fmManager.beginTransaction();
        //将所有的Fragment 隐藏
        hideFragments(ft, fm1, fm2, fm3, fm4);
        switch (index) {
        case 0:
            if(fm1 == null){
                fm1 = new Fragment01();
                ft.add(R.id.id_content, fm1);
            }else {
                ft.show(fm1);
            }
            break;
        case 1:
            if(fm2 == null){
                fm2 = new Fragment02();
                ft.add(R.id.id_content, fm2);
            }else {
                ft.show(fm2);
            }
            break;
        case 2:
            if(fm3 == null){
                fm3 = new Fragment03();
                ft.add(R.id.id_content, fm3);
            }else {
                ft.show(fm3);
            }
            break;
        case 3:
            if(fm4 == null){
                fm4 = new Fragment04();
                ft.add(R.id.id_content, fm4);
            }else {
                ft.show(fm4);
            }
            break;
        default:
            break;
        }
        ft.commit();
    }


    /**
     * 将制定fragment 隐藏Fragment
     * @param fragment
     */
    public void hideFragments(FragmentTransaction ft, Fragment...fragment){
        for (Fragment fragment2 : fragment) {
            if(fragment2 != null){
                ft.hide(fragment2);
            }
        }
    }


}

下面的代码出现异常, 导致切换界面时, 应用闪退。

 java.lang.IllegalStateException: commit already called

 在代码中, FragmentTrasaction  ft是一个全局变量,

但是在, 点击相应事件中,调用了多次, 

该错误,是因为你的ft事务是全局的变量,只能commit一次。 

 所以使用局部事务来commit().
package com.example.tabdemo01;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends FragmentActivity {
    TextView tv_header;
    FragmentManager fmManager ;
    FragmentTransaction ft;
    Fragment fm1;
    Fragment fm2;
    Fragment fm3;
    Fragment fm4;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        //将所有的Fragment 隐藏
        hideFragments(fm1, fm2, fm3, fm4);
    }

    public void initView() {
        tv_header = (TextView) findViewById(R.id.tv_headr);
        fmManager =  getSupportFragmentManager();
    /*    fm1 = new Fragment01();
        fm2 = new Fragment02();
        fm3 = new Fragment03();
        fm4 = new Fragment04();*/

        ft = fmManager.beginTransaction();






    }
    public void onweixin(View view){    
        tv_header.setText("微信");
        //将所有的Fragment 隐藏
        hideFragments(fm1, fm2, fm3, fm4);
        if(fm1 == null){
            fm1 = new Fragment01();
            ft.add(R.id.id_content, fm1);
        }else {
            ft.show(fm1);
        }
        ft.commit();
    }
    public void onFriend(View view){
        //将所有的Fragment 隐藏
        hideFragments(fm1, fm2, fm3, fm4);
        if(fm2 == null){
            fm2 = new Fragment02();
            ft.add(R.id.id_content, fm2);
        }else {
            ft.show(fm2);
        }
        tv_header.setText("好友");
        ft.commit();
    }
    public void onContacts(View view){
        //将所有的Fragment 隐藏
        hideFragments(fm1, fm2, fm3, fm4);
        tv_header.setText("联系人");
        if(fm3 == null){
            fm3 = new Fragment03();
            ft.add(R.id.id_content, fm3);
        }else {
            ft.show(fm3);
        }
        ft.commit();
    }
    public void onMyself(View view){
        //将所有的Fragment 隐藏
        hideFragments(fm1, fm2, fm3, fm4);
        tv_header.setText("我的");
        if(fm4 == null){
            fm4 = new Fragment04();
            ft.add(R.id.id_content, fm4);
        }else {
            ft.show(fm4);
        }
        ft.commit();

    }

    public void setTabSelection(int index, Fragment fm){
        //将所有的Fragment 隐藏
        hideFragments(fm1, fm2, fm3, fm4);
     
    }
    /**
     * 将制定fragment 隐藏Fragment
     * @param fragment
     */
    public void hideFragments(Fragment...fragment ){
        for (Fragment fragment2 : fragment) {
            if(fragment2 != null){
                ft.hide(fragment2);
            }
        }
    }


}

Tab系列 02 PagerAdapter+Fragment


推荐阅读
  • FroggerTimeLimit:1000MSMemoryLimit:65536KTotalSubmissions:32257Accepted:10396DescriptionFr ... [详细]
  • spotify engineering culture part 1
    原文,因为原视频说的太快太长,又没有字幕,于是借助youtube,把原文听&打出来了。中文版日后有时间再翻译。oneofthebigsucceessfactorshereatSpo ... [详细]
  • Xib九宫格应用管理使用xib封装一个自定义view的步骤1新建一个继承UIView的自定义view,假设类名叫做(AppView)2新建一个AppView.xib文件来描述 ... [详细]
  • 九宫格计算. ... [详细]
  • 22.Container With Most Water(能装最多水的容器)
    thecontainercontainsthemos ... [详细]
  • 代码:在mysql5.6,运行正常,5.7报错SELECTsum((selecta.numwherea.status1))astotalFROMmes_order_productA ... [详细]
  • 抓取百万知乎用户设计之实体设计
    一.实体的关系实体是根据返回的Json数据来设计的教育经历方面用户可以有很多教育经理,USER和education是一对多的关系,一个education对应一个education一 ... [详细]
  • iOS之富文本
    之前做项目时遇到一个问题:使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结 ... [详细]
  • 【自制小工具】代码生成器
    【自制小工具】代码生成器陆陆续续接触过好几款代码生成工具,发现确实好用,但都会有那么点不完善的地方,所以索性就自己做一个吧。界面非常简单,反正是自己用的,简单点用起来也方便上图:左 ... [详细]
  • kepserver中文手册,kepserver使用教程,kepserver设置
    下面介绍一下KepServer模拟器的使用,以下示例使用服务器随附的Simulator驱动程序来演示创建、配置和运行项目的过程。Simulator驱动程序是基于内存的驱动程序,能为 ... [详细]
  • 论文阅读及复现 | Improved Semantic Representations From TreeStructured Long ShortTerm Memory Networks
    两种形式的LSTM变体Child-SumTree-LSTMsN-aryTree-LSTMshttps:paperswithcode.compaperimproved-semanti ... [详细]
  • 看这里,教你如何快速将pdf文件翻译成中文
    因为网上下载的PDF资料,往往掺杂着一些英文,所以中英文翻译是一件很平常的事,毕竟不是每个人的英文都那么好,轻轻松松的就能够看完一篇英文的文件,那么,我们就要寻找翻译工具来帮助我们 ... [详细]
  • 以SOA服务为导向的信息系统构建是通过有计划地构建信息系统时,一种简单而有柔性的方法,就是组件化与服务导向架构。过去的信息系统,是在使用者需要新功能时才开发的,也就是响应不同时 ... [详细]
  • 简单动态字符串redis里面很多地方都用到了字符串,我们知道redis是一个键值对存储的非关系型数据库,那么所有的key都是用字符串存储的,还有字符串类型,这些都是用字符串存储的 ... [详细]
  • 例子如Table表有性别字段,1代表男2代表女、3代表中性、还有没填就代表未说明selectid,decode(sex,'1','男', ... [详细]
author-avatar
AK47GXF
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有