实现RadioGroup与Fragment的交互

2024-01-12 03:18

本文主要是介绍实现RadioGroup与Fragment的交互,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这算是对这篇的更新吧,之前的虽然能实现效果,但是每次点击就会产生一个新的对象,这样是不好的,接下来是更新的版本

public class MainActivity extends FragmentActivity {

    long first;
    private static final String TAG = "TestFragmentTab";
    @InjectView(R.id.radio_group)
    RadioGroup tabButtonGroup;
    @InjectView(R.id.download_apk)
    ImageView download;
    private long mPressedTime = 0;
    private int tabIds[] = new int[]{
            R.id.one,
            R.id.two,
            R.id.three,
            R.id.four
    };


    FirstFragment mTab1;
    SecondFragment mTab2;
    ThreadFragment mTab3;
    FourFragment mTab4;


    @Override
    public void onAttachFragment(Fragment fragment) {
        super.onAttachFragment(fragment);
        Log.d(TAG, "onAttachFragment");
        /**防止页面出现重叠现象*/
        if (mTab1 == null && fragment instanceof FirstFragment) {
            mTab1 = (FirstFragment) fragment;
        } else if (mTab2 == null && fragment instanceof SecondFragment) {
            mTab2 = (SecondFragment) fragment;
        } else if (mTab3 == null && fragment instanceof ThreadFragment) {
            mTab3 = (ThreadFragment) fragment;
        } else if (mTab4 == null && fragment instanceof FourFragment) {
            mTab4 = (FourFragment) fragment;
        }
    }




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        setContentView(R.layout.main_activity);
        ButterKnife.inject(this);
        initView();
        initData();
        setSelection(0);
    }


    void initView() {
        re = (ImageView) findViewById(R.id.iv_right);
    }


    void initData() {
        tabButtonGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {


            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                // TODO Auto-generated method stub
                for (int i = 0; i < tabIds.length; i++) {
                    if (tabIds[i] == checkedId) {
                        setSelection(i);
                        break;
                    }
                }
            }
        });
        re.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                intent.setType("*/*");
                startActivityForResult(intent,1);
            }
        });
        download.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Apkdowanload.intoDownloadManager(MainActivity.this);


            }
        });
    }


    private void setSelection(int position) {


        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        hideAllFragments(ft);


        switch (position) {
            case 0:
                if (mTab1 == null) {
                    mTab1 = new FirstFragment();
                    ft.add(R.id.fragment_container, mTab1);
                } else {
                    ft.show(mTab1);
                }
                break;


            case 1:
                if (mTab2 == null) {
                    mTab2 = new SecondFragment();
                    ft.add(R.id.fragment_container, mTab2);
                } else {
                    ft.show(mTab2);
                }
                break;


            case 2:
                if (mTab3 == null) {
                    mTab3 = new ThreadFragment();
                    ft.add(R.id.fragment_container, mTab3);
                } else {
                    ft.show(mTab3);
                }
                break;
            case 3:
                if (mTab4 == null) {
                    mTab4 = new FourFragment();
                    ft.add(R.id.fragment_container, mTab4);
                } else {
                    ft.show(mTab4);
                }
                break;


            default:
                break;
        }


        ft.commit();
    }


    private void hideAllFragments(FragmentTransaction ft) {
        if (mTab1 != null) {
            ft.hide(mTab1);
        }


        if (mTab2 != null) {
            ft.hide(mTab2);
        }


        if (mTab3 != null) {
            ft.hide(mTab3);
        }
        if (mTab4 != null) {
            ft.hide(mTab4);
        }
    }

    @Override
    public void onBackPressed() {
        long first = System.currentTimeMillis();


        if ((first - mPressedTime) > 2000) {
            Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
            mPressedTime = first;
        } else {
            System.exit(0);
        }
    }
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <include layout="@layout/titlebar"/>
<FrameLayout android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"/>
    <RadioGroup android:id="@+id/radio_group"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal"
        android:layout_gravity="center_vertical"
        android:background="@android:color/black">
        <RadioButton android:id="@+id/one"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:checked="true"
            android:gravity="center"
            android:button="@null"
            android:layout_marginTop="2dp"
            android:drawableTop="@drawable/selector_main_tab_pic"
            android:text="首页"
            android:textColor="@drawable/selector_main_tab_text_color"/>
        <RadioButton android:id="@+id/two"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:gravity="center"
            android:button="@null"
            android:layout_marginTop="2dp"
            android:drawableTop="@drawable/selector_game_tab_pic"
            android:text="游戏"
            android:textColor="@drawable/selector_main_tab_text_color"/>
        <RadioButton android:id="@+id/three"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:button="@null"
            android:layout_marginTop="2dp"
            android:gravity="center"
            android:drawableTop="@drawable/selector_pic_tab_pic"
            android:text="图集"
            android:textColor="@drawable/selector_main_tab_text_color"/>
        <RadioButton android:id="@+id/four"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:button="@null"
            android:layout_marginTop="2dp"
            android:gravity="center"
            android:drawableTop="@drawable/selector_self_tab_pic"
            android:text="个人"
            android:textColor="@drawable/selector_main_tab_text_color"/>
    </RadioGroup>
</LinearLayout>





public class MainActivity extends FragmentActivity {

    private Fragment[] fragments = {new Fragment1(),//四个界面
            new Fragment2(),
            new Fragment3(),
            new Fragment4()};
    private int index;
    // 当前fragment的index
    private int currentTabIndex;
    private RadioGroup mTabs;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mTabs = (RadioGroup) findViewById(R.id.tabs);
        mTabs.setOnCheckedChangeListener(mOnCheckedChangeListener);
        mTabs.check(R.id.rb_main);
        // 添加显示第一个fragment
        getSupportFragmentManager()
        .beginTransaction()
        .add(R.id.fragment_container, fragments[0])
                .add(R.id.fragment_container, fragments[3]).hide(fragments[3]).show(fragments[0]).commit();

    }
     private RadioGroup.OnCheckedChangeListener mOnCheckedChangeListener = new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                    case R.id.rb_main: index = 0;
                        break;
                    case R.id.rb_music: index = 1;
                        break;
                    case R.id.rb_course: index = 2;
                        break;
                    case R.id.rb_contact:index = 3;
                        break;
                }
                if (currentTabIndex != index) {
                    FragmentTransaction trx = getSupportFragmentManager().beginTransaction();
                    trx.hide(fragments[currentTabIndex]);
                    if (!fragments[index].isAdded()) {
                        trx.add(R.id.fragment_container, fragments[index]);
                    }
                    trx.show(fragments[index]).commit();
                }
                currentTabIndex = index;
            }
        };
}


这篇关于实现RadioGroup与Fragment的交互的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/596631

相关文章

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J