使用Activity动态加载Fragment实现主界面框架

使用Activity动态加载Fragment实现主界面框架

在做项目中,需要建立一个主界面框架,尝试过使用ViewPager,后来又换成了使用Activity动态加载Fragment实现选项卡的效果。总结一下方便以后回顾。

先给出总体效果:

 使用Activity动态加载Fragment实现主界面框架

要实现上述效果,首先来大体上阐述步骤:

步骤一:

    创建一个界面框架布局文件activity_frame.xml ,一个垂直现行布局包含:从上到下第一个帧布局FrameLayout用于动态加载Fragment,命其idcontent;第二个布局是一个相对布局,用于放置三个标签按钮,其中三个线性布局嵌套分别一个ImageView,为了能均分,权重都为1;图标自己制作。同时创建一个FrameActivity.java文件,来显示主界面框架。

activity_frame.xml 代码:

 

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:background="#c0c0c0">

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

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

                <ImageView
                    android:id="@+id/main_image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@drawable/img_main" />
            </LinearLayout>
        </RelativeLayout>

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

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

                <ImageView
                    android:id="@+id/shop_image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@drawable/img_shop" />
            </LinearLayout>
        </RelativeLayout>

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

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

                <ImageView
                    android:id="@+id/shop_image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@drawable/img_shop" />
            </LinearLayout>
        </RelativeLayout>


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

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

                <ImageView
                    android:id="@+id/my_image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@drawable/img_my" />
            </LinearLayout>
        </RelativeLayout>
    </LinearLayout>

</LinearLayout>

 

步骤二:

   分别创建四个布局文件:

其中布局内容根据自己想要的布局设置;

步骤三:
    然后再为这四个布局创建对应的Fragment

其中每个Fragment加载布局的代码都是差不多,都是在onCreateView中获得一个View对象,其它代码根据业务需要而编写,如图:

步骤四:

    四Fragment创建好了之后,此时需要在FrameActivity中,通过界面底边的三个标签注册单击事件监听器来动态地加载Fragment

业务代码如下:


setTabSelection中包含一个switch函数,根据判断id来动态加载fragment(动态加载fragent的步骤这里不给出,csdn有相应的文章):
 FrameActivity的完整代码如下:

 

package com.android.activity;import com.android.client.R;import com.android.fragment.MainFragment;import com.android.fragment.MyFragment;import com.android.fragment.ShopFragment;import android.app.Activity;import android.app.AlertDialog;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.app.AlertDialog.Builder;import android.content.DialogInterface;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.ImageView;public class FrameActivity extends Activity implements OnClickListener {    private MainFragment mainFragment;    private ShopFragment shopFragment;    private MyFragment myFragment;    private View mainLayout;    private View shopLayout;    private View myLayoutView;    private ImageView mainImg;    private ImageView shopImg;    private ImageView myImg;    private FragmentManager fragmentManager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_frame);        initViews();        fragmentManager = getFragmentManager();        setTabSelection(0);    }    private void setTabSelection(int i) {        clearSelection();        FragmentTransaction transaction = fragmentManager.beginTransaction();        hideFragments(transaction);        switch (i) {            case 0:                mainImg.setImageResource(R.drawable.img_main_pressed);                if (mainFragment == null) {                    mainFragment = new MainFragment();                    transaction.add(R.id.content, mainFragment);                } else {                    transaction.show(mainFragment);                }                break;            case 1:                shopImg.setImageResource(R.drawable.img_shop_pressed);                if (shopFragment == null) {                    shopFragment = new ShopFragment();                    transaction.add(R.id.content, shopFragment);                } else {                    transaction.show(shopFragment);                }                break;            case 2:            default:                myImg.setImageResource(R.drawable.img_my_pressed);                if (myFragment == null) {                    myFragment = new MyFragment();                    transaction.add(R.id.content, myFragment);                } else {                    transaction.show(myFragment);                }                break;        }        transaction.commit();    }    private void hideFragments(FragmentTransaction transaction) {        if (mainFragment != null) {            transaction.hide(mainFragment);        }        if (shopFragment != null) {            transaction.hide(shopFragment);        }        if (myFragment != null) {            transaction.hide(myFragment);        }    }    private void clearSelection() {        // TODO Auto-generated method stub  mainImg.setImageResource(R.drawable.img_main);        shopImg.setImageResource(R.drawable.img_shop);        myImg.setImageResource(R.drawable.img_my);    }    private void initViews() {        // TODO Auto-generated method stub  mainLayout = findViewById(R.id.main_layout);        shopLayout = findViewById(R.id.shop_layout);        myLayoutView = findViewById(R.id.my_layout);        mainImg = (ImageView) findViewById(R.id.main_image);        shopImg = (ImageView) findViewById(R.id.shop_image);        myImg = (ImageView) findViewById(R.id.my_image);        mainLayout.setOnClickListener(this);        shopLayout.setOnClickListener(this);        myLayoutView.setOnClickListener(this);    }    @Override    public void onClick(View arg0) {        switch (arg0.getId()) {            case R.id.main_layout:                setTabSelection(0);                break;            case R.id.shop_layout:                setTabSelection(1);                break;            case R.id.my_layout:                setTabSelection(2);                break;            default:                break;        }        // TODO Auto-generated method stub   }    //框架中的退出提示代码,常规代码重用率很高可以抽象出来    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        // TODO Auto-generated method stub  if (keyCode == KeyEvent.KEYCODE_BACK) {            if (keyCode == KeyEvent.KEYCODE_BACK) {                Builder builder = new Builder(FrameActivity.this);                builder.setTitle("提示");                builder.setMessage("你确定要退出吗?");                builder.setIcon(R.drawable.ic_launcher);                DialogInterface.OnClickListener dialog = new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface arg0, int arg1) {                        // TODO Auto-generated method stub  if (arg1 == DialogInterface.BUTTON_POSITIVE) {                            arg0.cancel();                        } else if (arg1 == DialogInterface.BUTTON_NEGATIVE) {                            FrameActivity.this.finish();                        }                    }                };                builder.setPositiveButton("取消", dialog);                builder.setNegativeButton("确定", dialog);                AlertDialog alertDialog = builder.create();                alertDialog.show();            }        }        return false;    }}

 

到此,界面框架已经建好,接下来就根据自己的业务需要实现代码。

犯了错,总之要改,改之后呢,最好还是记录。因为这些难题在后来的日子还是会遇到。不妨到时候回过头看看自己当时记录的错误。毕竟是自己的错,资以改正。


纸上得来终觉浅,书到用时方恨少。希望对你有所帮助。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115080.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 笔试面试算法经典–最长回文子串

    笔试面试算法经典–最长回文子串回文的定义正读和反读都相同的字符序列为“回文”,如“abba”、“abccba”是“回文”,“abcde”和“ababab”则不是“回文”。字符串的最长回文子串,是指一个字符串中包含的最长的回文子串。例如“1212134”的最长回文子串是“12121”。下面给出了三种求最长子串的方法。解法1(中心扩展法)时间复杂度O(n^2),空间复杂度为O(1)。中心扩展法的思路是,遍历到数组的某一个元素时,以这

    2022年6月9日
    78
  • 最详细eclipse汉化插件安装教程

    最详细eclipse汉化插件安装教程教程作者:阿良,欢迎转载,转载请说明出处!本人QQ:583393588,欢迎广大安卓朋友交流!本文与《最详细安卓ADT装教程》是兄弟篇,欢迎查阅:http://blog.csdn.net/dai_zhenliang/article/details/8490837我鄙视那些中文不好而鄙视我用中文的人离线安装中文包方式一:使用下载单独的语言包比如汉化eclipseindig

    2022年6月1日
    35
  • 自己动手——快速搭建Java应用服务器

    自己动手——快速搭建Java应用服务器Motivation我写这套帖子的目的,是在自己学会、实现并熟练掌握之后,想帮助下面将会提到的这样一群正在学习Android的新手(虽然我自己也是新手),通过自己的经验传递出去,让他们少走一点弯路,节省大量用在查询和翻阅资料的时间。我在学习编写自己的Android应用程序服务器的时候遇到过以下的问题:1.我需要准备什么?2.我该选择哪一套实现方案?……这些问题的搜索和查证都…

    2022年6月12日
    28
  • 漫谈大数据 – 基于SparkSQL的离线数仓「建议收藏」

    漫谈大数据 – 基于SparkSQL的离线数仓「建议收藏」数据仓库,英文名称为DataWarehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。

    2025年7月25日
    2
  • c# 第14节 字符方法、转义字符、字符串的方法[通俗易懂]

    c# 第14节 字符方法、转义字符、字符串的方法

    2022年3月13日
    43
  • hibernate二级缓存配置[通俗易懂]

    hibernate二级缓存配置[通俗易懂] 二级缓存配置:    1、首先要打开二级缓存,在hibernate.cfg.xml中添加如下配置:  property name=”hibernate.cache.use_second_level_cache”>trueproperty>    2、Hibernate的二级缓存使用第三方的缓存工具来实现,所以我们需要指定Hibernate使用哪个     缓存工

    2022年5月10日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号