Fragment的使用(Android实现底部导航栏)





一、布局页面添加

1.添加四个切换页面的布局

(1)四个切换页面的布局(四个页面相同):

<?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:background="@color/aquamarine"
    android:gravity="center"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="第一个页面"
        android:textSize="22sp" />

</LinearLayout>

 

(2)相应Fragment的实现类:

 

 

public class FirstFragment extends Fragment {

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fg1, container, false);
        return view;
    }
}

 

(3)如图:

 

2.添加主页面的布局(底部导航按钮布局和顶部标题布局直接写在该布局)

 

(1)主布局页面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/colorAccent"
    tools:context=".MainActivity">

    <include
        android:id="@+id/show_main_title"
        layout="@layout/title_layout"
        />

    <!-- 此处添加Fragment布局 -->

    <FrameLayout
        android:id="@+id/fragment_buju"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@color/viewfinder_mask"
        >
    </FrameLayout>


    <!-- 关于试题逻辑的相关功能布局暂时屏蔽

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical"
        android:gravity="center"
        android:background="@color/whitesmoke">

    <TextView
        android:id="@+id/question_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="24dp">
    </TextView>

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

        <Button
            android:id="@+id/true_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/true_button"
            android:textAllCaps="false"/>

        <Button
            android:id="@+id/false_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/false_button"
            android:textAllCaps="false"/>

    </LinearLayout>

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

        <ImageButton
            android:id="@+id/up_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/arrow_left"
            />

        <ImageButton
            android:id="@+id/next_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/arrow_right"
            />


    </LinearLayout>
    </LinearLayout>

        -->

    <!-- 底部四个导航菜单栏 -->

    <!-- 暂时先将该段底部实例注释掉,后期再添加 -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="@color/white">

        <RelativeLayout
            android:id="@+id/first_layout"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerVertical="true"
                android:orientation="vertical">

                <ImageView
                    android:id="@+id/first_image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@android:drawable/ic_menu_compass"/>

                <TextView
                    android:id="@+id/first_text"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:layout_marginTop="5dp"
                    android:textColor="#7597B3"
                    android:text="消息"/>

            </LinearLayout>

        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/second_layout"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerVertical="true"
                android:orientation="vertical">

                <ImageView
                    android:id="@+id/second_image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@android:drawable/ic_menu_agenda"/>
                <TextView
                    android:id="@+id/second_text"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:layout_marginTop="5dp"
                    android:textColor="#7597B3"
                    android:text="发现"/>

            </LinearLayout>



        </RelativeLayout>


        <RelativeLayout
            android:id="@+id/third_layout"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerVertical="true"
                android:orientation="vertical">

                <ImageView
                    android:id="@+id/third_image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@android:drawable/ic_menu_edit"/>
                <TextView
                    android:id="@+id/third_text"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:layout_marginTop="5dp"
                    android:textColor="#7597B3"
                    android:text="记录"/>

            </LinearLayout>

        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/fourth_layout"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerVertical="true"
                android:orientation="vertical">

                <ImageView
                    android:id="@+id/fourth_image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@android:drawable/ic_menu_myplaces"/>
                <TextView
                    android:id="@+id/fourth_text"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:layout_marginTop="5dp"
                    android:textColor="#7597B3"
                    android:text="我的"/>

            </LinearLayout>

        </RelativeLayout>

    </LinearLayout>



    <!-- 替代按钮导航  -->
    <!--
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="#FFFFFF"
        android:orientation="horizontal">

        <Button
            android:id="@+id/button_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="消息"/>

        <Button
            android:id="@+id/button_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="发现"/>

        <Button
            android:id="@+id/button_3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="记录"/>

        <Button
            android:id="@+id/button_4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我的"/>


    </LinearLayout>
    -->

</LinearLayout>

 

页面上添加了四个底部菜单按钮和一个通用头部布局,头部引入代码如果没有写相关布局可以先忽略去掉(删除)

关键代码:

 

<FrameLayout
    android:id="@+id/fragment_buju"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:background="@color/viewfinder_mask"
    >
</FrameLayout>

这一块是引入中间需要切换的界面的代码,导航和底部菜单的布局可以随意添加;初次使用底部的导航布局建议使用四个Button按钮,且先添加两个功能按钮,方便理解。

 

(2)相应实现类

public class MainActivity extends Activity {


    private TextView mFirstButton, mSecondFragment;
    private ImageView mFirstImage, mSecondImage;
    private RelativeLayout mFirstLayout, mSecondLayout;
    private Fragment mFragment1;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
        setview();
    }

    // 控件点击事件方法
    private void setview() {

        mFirstLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 获取Fragment对象
                android.app.FragmentManager fm = getFragmentManager();
                // 开启一个事物
                android.app.FragmentTransaction MfragmentTransactions  = fm.beginTransaction();
                // 将自己创建的fragment通过对象引入
                 FirstFragment fff = new FirstFragment();
                 // 向容器内加入Fragment,一般使用add或者replace方法实现,需要传入容器的id和Fragment的实例
                MfragmentTransactions .replace(R.id.fragment_buju,fff);
                MfragmentTransactions .commit();

            }
        });


        mSecondLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentManager fm = getFragmentManager();
                FragmentTransaction fragmentTransaction = fm.beginTransaction();
                SecondFragment f2 = new SecondFragment();
                fragmentTransaction.replace(R.id.fragment_buju,f2);
                fragmentTransaction.commit();
            }
        });
    }

    // 初始化控件方法
    private void initView(){
        mFirstButton = (TextView)findViewById(R.id.first_text);
        mSecondFragment = (TextView)findViewById(R.id.second_text);

        mFirstImage = (ImageView)findViewById(R.id.first_image);
        mSecondImage = (ImageView)findViewById(R.id.second_image);

        mFirstLayout = (RelativeLayout)findViewById(R.id.first_layout);
        mSecondLayout = (RelativeLayout)findViewById(R.id.second_layout);


    }

}

 

 

 

实现方法中主要分为四步:1.引入布局(主布局);2.定义成员变量;3.初始化数据;4.定义按钮点击事件;

定义点击事件中四个点击事件的代码重复,可以优化处理,这里为了便于理解不做分开处理。

 

(3)如图:

 

 

 

二、自己学习过程遇到的问题

 

(1)看不懂FrameLayout布局如何引入四个页面;

 

XXX:这个多看几遍,自己照着写写就水到渠成的明白了;

 

(2)四个底部导航布局包括ImageView、TextView和RelativeLayout,不知道初始化数据需要初始化哪些,按钮点击事件写在哪个组件上;

XXX:还是对组件布局不熟悉;具体看点击事件要实现在那个地方;

 

(3)引入fragment时报错:

 

错误:不兼容的类型:FirstFragment无法转换为Fragment,

 

 

XXX:这个是Fragment使用导入包不一致导致的;导入包有两个,一个是系统内置的android.app.Fragment,一个是support-v4库中的android.support.v4.app.Fragment,但是建议使用后者;





  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Fragment实现底部导航栏的跳转,您需要执行以下步骤: 1. 在您的项目中创建一个BottomNavigationView对象,它将用于显示底部导航栏。 2. 创建多个Fragment类,每个类都代表底部导航栏的一个选项。 3. 在您的Activity类中,创建一个FragmentManager对象并使用beginTransaction()方法开始一个新的FragmentTransaction。 4. 在FragmentTransaction中,使用add()方法将您的第一个Fragment添加到Activity中。同时,将BottomNavigationView的setOnNavigationItemSelectedListener()方法定义为一个监听器,以便在用户点击底部导航栏时执行相应的操作。 5. 在监听器中,使用replace()方法切换到用户选择的Fragment。 以下是一个简单的示例代码,可以帮助您更好地理解如何使用Fragment实现底部导航栏的跳转: ``` public class MainActivity extends AppCompatActivity { private BottomNavigationView bottomNavigationView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bottomNavigationView = findViewById(R.id.bottom_navigation); // 设置默认选中项 bottomNavigationView.setSelectedItemId(R.id.navigation_home); // 设置监听器 bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { Fragment fragment; switch (menuItem.getItemId()) { case R.id.navigation_home: fragment = new HomeFragment(); break; case R.id.navigation_dashboard: fragment = new DashboardFragment(); break; case R.id.navigation_notifications: fragment = new NotificationsFragment(); break; default: return false; } getSupportFragmentManager() .beginTransaction() .replace(R.id.fragment_container, fragment) .commit(); return true; } }); } } ``` 在这个例子中,我们首先获取了一个BottomNavigationView对象,并将其与我们的布局文件关联。我们还设置了默认选中项并添加了一个监听器。 在监听器中,我们使用了一个switch语句来确定用户选择了哪个选项。然后我们创建了相应的Fragment,并使用replace()方法将其添加到Activity中。 请注意,我们使用了一个FrameLayout来承载我们的Fragment。您需要在布局文件中添加一个类似的视图,以便能够动态添加和删除Fragment。 希望这可以帮助您开始使用Fragment实现底部导航栏的跳转。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值