首页 > 其他分享 >移动开发技术——基本框架搭建

移动开发技术——基本框架搭建

时间:2024-11-18 17:17:13浏览次数:3  
标签:layout 框架 fragment Fragment 开发技术 context Activity id 搭建

 一、实现效果

二、功能说明

主界面有上中下三个结构,包含四个界面:联系人、聊天、发现、我的。从聊天可以点击进入列表页面,点击列表的某一行可以进入详情页面,列表的每一行对应不同的数据,列表可以上下滚动,要用到recycleview。

需要实现以下功能:activity之间的跳转,数据的绑定

三、相关知识点介绍

1、activity

Activity称为活动组件(也称界面程序),它会加载布局文件(属于资源文件)

Activity表现为四种状态:

•活动状态Active:Activity在用户界面中处于最上层,完全能被用户看到,能够与用户进行交互。

•暂停状态Pause:Activity在界面上被部分遮挡,不再处于用户界面的最上层,且不能够与用户进行交互。(如弹出消息框)

•停止状态Stop:Activity被其他Activity全部遮挡,界面完全不能被用户看到。(如玩游戏时来电了)

•非活动状态Dead:Activity没有启动或者被finish()。

Activity和Service都是Context的子类,通过Context提供的方法getApplicationContext()方法就能获到Context对象。Context是一个抽象类且为Activity的超类,提供了startActivity()方法,并以Intent对象作为参数,用于实现窗体之间的跳转。 

一个Activity调用另一个Activity时,可以有数据传递,通过Intent对象携带Bundle类型的数据。

2、fragment

Fragment 是片段的意思,在 Android3.0 中引入了 Fragment ,引入的主要目的是为了更好地重用和适应大屏幕的需求。例如现在很多手机和平板都是大尺寸和高分辨率,那么当手机横屏时可能分为左右两栏显示,竖屏时仅仅显示一栏。使用 Fragment 可以方便地实现这种需求。 Fragment 必须被包含在 Activity 中 •OnCreate():当Fragment被创建时调用,一般在此方法中做必要的初始化工作。• OnCreateView (): 当 Fragment 显示界面时回调此方法,返回显示的 View

3、recycleview

• RecyclerView 是 Android 5.0 推出的,是 support-v7 包中的新组件 , 它被用来代替 ListView 和 GridView ,并且能够实现瀑布流的布局,更加高级并且更加灵活,提供更为高效的回收复用机制,同时实现管理与视图的解耦合。

四、实现过程及代码

1、布局文件

实现recycleview

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".adapterActivity">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recycleView"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginBottom="8dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="1.0" />
    </androidx.constraintlayout.widget.ConstraintLayout>

</LinearLayout>

实现主界面ui

include写好的layout_top.xml和layout_bottom文件,采用vertical,中间留白,因为fragment里面会传参,以免覆盖

<?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="wrap_content">

    <TextView
        android:id="@+id/textView_top"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="我的微信"
        android:textAlignment="center"
        android:textColor="#FFEB3B"
        android:textSize="48sp" />
</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:orientation="horizontal">

    <LinearLayout
        android:id="@+id/bottom_linearlayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="60dp"
            tools:srcCompat="@drawable/p1" />

        <TextView
            android:id="@+id/textView_bottom1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="联系人"
            android:textAlignment="center"
            android:textSize="24sp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/bottom_linearlayout2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="wrap_content"
            android:layout_height="60dp"
            tools:srcCompat="@drawable/p1" />

        <TextView
            android:id="@+id/textView_bottom2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="聊天"
            android:textAlignment="center"
            android:textSize="24sp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/bottom_linearlayout3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/imageView3"
            android:layout_width="wrap_content"
            android:layout_height="60dp"
            tools:srcCompat="@drawable/p1" />

        <TextView
            android:id="@+id/textView_bottom3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="发现"
            android:textAlignment="center"
            android:textSize="24sp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/bottom_linearlayout4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/imageView4"
            android:layout_width="wrap_content"
            android:layout_height="60dp"
            tools:srcCompat="@drawable/p1" />

        <TextView
            android:id="@+id/textView_bottom4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="我的"
            android:textAlignment="center"
            android:textSize="24sp" />
    </LinearLayout>

</LinearLayout>

实现fragment

2、fragment

每个Fragment都需要重写如下两个方法:OnCreate(),OnCreateView()

以fragment1为例

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_layout1, container, false);
    }

fragment2中有可滚动的列表,这里用recycleview来实现

用Map存储键值对,来对应列表中每行不同的数据

使用ServiceConnection来实现绑定

ServiceConnection

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        // Inflate the layout for this fragment
        View view=inflater.inflate(R.layout.activity_adapter, container, false);


        Context context=getContext();

        recyclerView=view.findViewById(R.id.recycleView);

        int[] phonename={R.drawable.p_1, R.drawable.p_2, R.drawable.p_3};
        String[]price={"1000","2000","3000"};
        String[]config={"ssss","qqqq","rrrr"};

        List<Map<String, Object>> list1=new ArrayList<Map<String, Object>>();
        for(int i=0;i<phonename.length;i++){
            Map<String, Object> map=new HashMap<>();
            map.put("name",phonename[i]);
            map.put("price",price[i]);
            map.put("config",config[i]);
            list1.add(map);
        }


        adapter adapter0=new com.example.myapplication.adapter(context,list1);
        recyclerView.setAdapter(adapter0);

        LinearLayoutManager manager = new LinearLayoutManager(context);
        manager.setOrientation(LinearLayoutManager.VERTICAL);

        recyclerView.setLayoutManager(manager);

        Intent intent=new Intent(context, MyService.class);

        //context.startService(intent);
        ServiceConnection connection=new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
                mybinder=(MyService.Mybinder) iBinder;
                mybinder.todo();
            }

            @Override
            public void onServiceDisconnected(ComponentName componentName) {
                mybinder=null;
            }
        };
        context.bindService(intent,connection,Context.BIND_AUTO_CREATE);
        //context.unbindService(connection);
    return view;
    }

3、activity

用以下函数实现点击效果

setOnClickListener

由于版本的问题,没有采用switch语句而是使用if else来选择fragment

    @Override
    public void onClick(View view) {
        int id = view.getId();
        if (id == R.id.bottom_linearlayout1) {
            showfragment(fragment1);

        } else if (id == R.id.bottom_linearlayout2) {
            showfragment(fragment2);

        } else if (id == R.id.bottom_linearlayout3) {
            showfragment(fragment3);

        } else if (id == R.id.bottom_linearlayout4) {
            showfragment(fragment4);
        }
    }

源代码

标签:layout,框架,fragment,Fragment,开发技术,context,Activity,id,搭建
From: https://blog.csdn.net/2301_78836301/article/details/143849062

相关文章

  • python自动化之selenium 自动化unittest框架
    自动化框架一、介绍框架1、unittest框架是python中自带的框架2、作用:管理和组织测试用例当我们写的用例越来越多,我们就要考虑用例的编写的规范和组织,以便于后期的维护3、常见的自动化框架:po框架、pytest框架、unittest框架(我们讲解)4、unitest框架自带标准的库:有如下a、T......
  • WVP-pro 搭建相关的坑注意
    Wvp-pro是一个开源的gb28181平台## 一些知识点网址 https://doc.wvp-pro.cn/#/相关的另一个开源的  一个基于C++11的高性能运营级流媒体服务框架ZLMediaKitjava,sprinboot,npmmysqredisdocker坑位wvp部署时,需要设置zlmediakit的secret,这个secret需要在do......
  • 使用ProxyPool搭建代理IP池并获取代理IP示例
    安装ProxyPool首先确保已经安装了 pip 工具(Python的包管理工具),在命令行执行以下命令安装 proxypool:配置ProxyPoolProxyPool的配置文件通常是 config.py,可以根据需求修改配置项,比如设置代理IP的来源、验证周期等。以下是一个简单示例配置(部分关键配置项示意):启动ProxyP......
  • 国内程序化交易和量化交易有哪些好用的框架与工具?
    炒股自动化:申请官方API接口,散户也可以python炒股自动化(0),申请券商API接口python炒股自动化(1),量化交易接口区别Python炒股自动化(2):获取股票实时数据和历史数据Python炒股自动化(3):分析取回的实时数据和历史数据Python炒股自动化(4):通过接口向交易所发送订单Python炒股自动化(5):......
  • Flutter项目实战(1):通用项目框架搭建
    下面介绍Flutter最基本的通用项目框架搭建,同时实现了一个登录界面图标和登录界面。先看下效果图:使用ScreenUtilInit自适应界面大小;使用Stack支持多个子界面在同一个全屏主界面上选择显示;使用Get插件实现界面之间的跳转和国际化翻译;界面都通过Transform实现了鼠标移动......
  • 安全渗透工程师入门最快需要多久?提供具体路线和学习框架
    前言网络渗透这个东西学起来如果没有头绪和路线的话,是非常烧脑的。最快达到入门也要半年理清网络渗透学习思路,把自己的学习方案和需要学习的点全部整理,你会发现突然渗透思路就有点眉目了。网络安全好混,但不容易混得好。其实任何行业都是这样,想混得好,必须不断学习提升。......
  • linux(统信)下搭建electron开发环境
    1.安装vscode下载地址https://vscode.download.prss.microsoft.com/dbazure/download/stable/f1a4fb101478ce6ec82fe9627c43efbf9e98c813/code-stable-x64-1731511985.tar.gz下载后拷贝压缩包到安装目录下解压缩.点击code就可以启动.2.安装githttps://git-scm.com/downlo......
  • DolphinScheduler心脏:Quartz的定时任务调度框架深度解析
    Quartz是一个开源的Java作业调度框架,它提供了强大的定时任务调度功能。在DolphinScheduler中,Quartz用于实现定时任务的调度和管理。DolphinScheduler通过QuartzExecutorImpl类与Quartz集成,将工作流及其定时管理操作与Quartz调度框架相结合,实现任务的调度执行。本文将详细剖析Quar......
  • catia零部件装配结构搭建
    catia零部件装配结构搭建ProductCatia的product文件保存装配结构和各个零部件之间的参数关系与约束关系,不保存三维实体本身。装配结构搭建通常在装配结构搭建的时候不考虑零部件之间的约束关系,只保留装配结构与位置关系(零部件的三维坐标与当前的姿态)。程序思路一般情况下,会......
  • 第九课 Python自动化之selenium 自动化unittest框架(9.3)
    自动化框架*一、介绍框架1、unittest框架是python中自带的框架2、作用:管理和组织测试用例当我们写的用例越来越多,我们就要考虑用例的编写的规范和组织,以便于后期的维护3、常见的自动化框架:po框架、pytest框架、unittest框架(我们讲解)4、unitest框架自带标准的库:有如下a、......