使用LinearLayout+TextView实现底部导航栏,重复切换页面不会重新加载

原创 2016年08月28日 16:14:00
    上次有写一篇“Fragment+RadioButton组合构成的底部导航栏的实现”的博客,
    本次写这篇博客:1、想用百度贴吧底部导航栏的方式实现;2、切换Fragment时用hide和add的方式进行切换,这样不会重新实例化。
    直接代码贴上:
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.ImageView;
import android.widget.LinearLayout;

import java.util.List;

/**
 * 采用LinearLayout+TextView的方式构成的底部导航栏,重复切换页面不会重新加载
 */
public class MainActivity extends FragmentActivity {
    /**数组的形式*/
    private Fragment[] mFragments;
    /**fragment管理*/
    private FragmentManager fragmentManager;
    /**fragment的事务控制器*/
    FragmentTransaction fragmentTransaction;
    private int last_Fragment = 0;
    private LinearLayout tab_main;
    private LinearLayout tab_vip;
    private LinearLayout tab_tba;
    private LinearLayout tab_mine;
    /** 红点*/
    private ImageView bar_point;
    private int checkedNum = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ly_main);
        bar_point = (ImageView) findViewById(R.id.bar_point);
        tab_main = (LinearLayout) findViewById(R.id.tab_main);
        tab_tba = (LinearLayout) findViewById(R.id.tab_tba);
        tab_vip = (LinearLayout) findViewById(R.id.tab_vip);
        tab_mine = (LinearLayout) findViewById(R.id.tab_mine);
        initmFagments();
    }
    /**初始化Fragment*/
    private void initmFagments() {
        mFragments = new Fragment[4];

        fragmentManager = getSupportFragmentManager();
        mFragments[0] = fragmentManager.findFragmentById(R.id.fr_main);
        mFragments[1] = fragmentManager.findFragmentById(R.id.fr_tba);
        mFragments[2] = fragmentManager.findFragmentById(R.id.fr_vip);
        mFragments[3] = fragmentManager.findFragmentById(R.id.fr_mine);

        fragmentTransaction = fragmentManager.beginTransaction().hide(mFragments[0]).hide(mFragments[1]).hide(mFragments[2]).hide(mFragments[3]);
        //默认显示第0 个
        fragmentTransaction.show(mFragments[0]).commit();
        tab_main.setSelected(true);


    }
    public void switchContent(Fragment from, Fragment to) {
        FragmentTransaction transaction = fragmentManager.beginTransaction();
            if (!to.isAdded()) {    // 先判断是否被add过
                transaction.hide(from).add(R.id.fr_main, to).commit(); // 隐藏当前的fragment,add下一个到Activity中
            } else {
                transaction.hide(from).show(to).commit(); // 隐藏当前的fragment,显示下一个
            }
    }
    /**
     * 点击切换不同tab
     */
    public void tab_click(View view) {
        switch (view.getId()) {
            case R.id.tab_main:
                tab_main.setSelected(true);
                tab_tba.setSelected(false);
                tab_vip.setSelected(false);
                tab_mine.setSelected(false);
                checkedNum = 0;
                break;
            case R.id.tab_tba:
                tab_tba.setSelected(true);
                tab_main.setSelected(false);
                tab_vip.setSelected(false);
                tab_mine.setSelected(false);
                checkedNum = 1;
                break;
            case R.id.tab_vip:
                tab_vip.setSelected(true);
                tab_tba.setSelected(false);
                tab_main.setSelected(false);
                tab_mine.setSelected(false);
                checkedNum = 2;
                break;
            case R.id.tab_mine:
                tab_mine.setSelected(true);
                tab_vip.setSelected(false);
                tab_tba.setSelected(false);
                tab_main.setSelected(false);
                bar_point.setVisibility(View.VISIBLE);
                checkedNum = 3;
                break;
        }
        Fragment to = mFragments[checkedNum];
        Fragment last = mFragments[last_Fragment];
        last_Fragment=checkedNum;
        switchContent(last,to);
    }


}
        xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <fragment
        android:id="@+id/fr_main"
        android:name="对应的fragment文件路径"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    </fragment>

    /**为节约篇幅,这里只放一个。。。。。。。。*/
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#ffcacacc" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <LinearLayout
                android:id="@+id/tab_main"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="tab_click">

                <TextView
                    style="@style/main_tab_radio_button_style"
                    android:drawableTop="@drawable/other_btn_image"
                    android:enabled="true"
                    android:text="XX" />
            </LinearLayout>

            <LinearLayout
                android:id="@+id/tab_tba"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="tab_click">

                <TextView
                    style="@style/main_tab_radio_button_style"
                    android:drawableTop="@drawable/other_btn_image"
                    android:text="XX" />
            </LinearLayout>

            <LinearLayout
                android:id="@+id/tab_vip"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="tab_click">


                <TextView
                    style="@style/main_tab_radio_button_style"
                    android:drawableTop="@drawable/other_btn_image"
                    android:text="XX" />
            </LinearLayout>

            <LinearLayout
                android:id="@+id/tab_mine"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:onClick="tab_click"
                android:orientation="vertical">

                <TextView
                    style="@style/main_tab_radio_button_style"
                    android:drawableTop="@drawable/other_btn_image"
                    android:text="XX" />

                <ImageView
                    android:id="@+id/bar_point"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="-15dp"
                    android:layout_marginTop="-55dp"
                    android:background="@android:color/transparent"
                    android:src="@drawable/bar_dot"
                    android:visibility="gone" />
            </LinearLayout>
        </LinearLayout>
    </FrameLayout>
</LinearLayout>
    只在最后一个按钮上添加了显示红点的提示,其他按钮上也可用相同的方式添加;默认为隐藏的状态。

底部导航栏实现页面的切换(一):Fragment + LinearLayout + TextView

Fragment + LinearLayout + TextView 实现底部导航栏的切换(一)知识点先看效果图:项目结构图:实现逻辑: 顶部是LinearLayout,里面放了TextView;...

底部导航栏实现页面的切换(五):TabHost

这种用法已经过时了, TabHost实现选项卡界面有多种方法,这里说最简单的一种继承ActivityGroup,布局中使用TabHost+TabWidget,调用方法tabHost.setup(ge...

底部导航栏实现页面的切换(三):Fragment + RadioGroup + ViewPager

底部导航栏实现页面的切换(三):Fragment + RadioGroup + ViewPager知识点效果图:逻辑 布局:顶部是LinearLayout,里面放了TextView;底部是Radi...

底部导航栏实现页面的切换(四):消息提示

APP4: 导航栏消息提示 参考:http://blog.csdn.net/coder_pig/article/details/48104807 知识点效果图: 是在 底部导航栏实现页面的切换...

安卓学习(textview+LinearLayout实现导航栏)

程序设计实践第三周上周主要任务上周主要对整个程序的布局进行了更改,本来的设计是所有的界面都显示了广告栏,但是这样的设计是极其不友好的,广告栏会占据整个屏幕较大的空间,影响用户感受,因此在原有的基础上对...

TextView+Fragment实现底部导航栏

  • 2015年09月08日 22:41
  • 1.49MB
  • 下载

TextView+Fragment实现底部导航栏

前言:项目第二版刚上线没多久,产品又对需求进行了大改动,以前用的是左滑菜单,现在又要换成底部导航栏,于是今天又苦逼加班了.花了几个小时实现了一个底部导航栏的demo,然后总结一下.写一篇博客.供自己以...

TextView+Fragment实现底部导航栏

  • 2016年07月31日 20:47
  • 3.74MB
  • 下载

TextView+Fragment实现底部导航栏

这篇主要实现TextView+Fragment实现底部导航栏的功能,实现过程很简单,本质就是处理textview的点击事件。主要的缺点就是不能左右滑动,所以这个功能适合页面上有滑动功能的软件,可以避免...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用LinearLayout+TextView实现底部导航栏,重复切换页面不会重新加载
举报原因:
原因补充:

(最多只允许输入30个字)