Android:在 Activity 中声明 View 组件的最佳实践是啥? [关闭]

     2023-02-23     221

关键词:

【中文标题】Android:在 Activity 中声明 View 组件的最佳实践是啥? [关闭]【英文标题】:Android: What is best practice for declaring View components in an Activity? [closed]Android:在 Activity 中声明 View 组件的最佳实践是什么? [关闭] 【发布时间】:2015-11-16 12:22:07 【问题描述】:

一个典型的 android 活动。

public class MainActivity extends AppCompatActivity 

    /* Should I declare view components here? */
    TextView textView;
    Button button;
    RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState)
      super.onCreate(savedInstanceState);

      /* And then create them here */
      textView = (TextView) findViewById(R.id.textview); 
      button = (Button) findViewById(R.id.button);       
      recyclerView = (RecyclerView) findViewById(R.id.recyclerview);   

      /* Or is it better to declare and create them like this? */
      Spinner spinner = (Spinner) findViewById(R.id.spinner);
      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);    
    

在这两种情况下,组件都会按预期工作并且可以按预期使用。但是,在您的主要活动或片段中声明类似的视图时,是否应该遵循编程实践或模式?还是根本不重要。

【问题讨论】:

【参考方案1】:

这取决于!

如果您需要访问onCreate之外的视图组件,在类的其他方法中,这些方法不是从onCreate调用的,那么您可以选择将这些视图组件的引用存储为实例变量。这适用于文本视图、列表视图等可能需要从类的其他方法更新的内容。

如果您不需要onCreate 之外的视图组件,则无需将它们设为实例变量。这通常适用于按钮,一旦您定义了 setOnClickListener,您可能不需要再次访问该组件。

很少有开发人员喜欢为所有视图组件声明实例变量。有些甚至将它们声明为static 变量,并从其他类访问它们——甚至滥用它在活动之间共享数据。在多成员团队中,这种约定很难维护——一些变量被声明为成员变量,而另一些则被遗漏了。很多时候,某些成员变量永远不会在 onCreate 之外访问,这会增加代码的混乱度。

【讨论】:

【参考方案2】:

拇指规则,如果你想在其他函数中使用,请在类中声明

【讨论】:

【参考方案3】:

这取决于你写什么。我会对此进行总结

    如果您在 onCreate 之外声明视图,您将能够在活动/片段中的任何方法中使用这些视图。

    但是,如果您在 onCreate 之类的方法中声明视图,则根本无法在任何其他不同的方法中再次引用这些视图。它只能在您编写视图声明的方法中被引用。

但是,根据我的编码经验,我总是喜欢在 onCreate 之外声明它们。它具有更多的可访问性,您不会丢失任何东西。

【讨论】:

如何在 Activity 内的 RecyclerView 适配器声明中声明单击侦听器

】如何在Activity内的RecyclerView适配器声明中声明单击侦听器【英文标题】:HowtodeclareclicklistenerwithinRecyclerViewadapterdeclarationinsideActivity【发布时间】:2021-02-0218:20:58【问题描述】:我正在尝试将我的Activity(包含RecyclerView)与Recycler... 查看详情

四大组件

android四大组件分别为activity、service、contentprovider、broadcastreceiver。一、Android四大组件详解1、activity(1)一个Activity通常就是一个单独的屏幕(窗口)。(2)Activity之间通过Intent进行通信。(3)android应用中每一个Activity都必须要... 查看详情

安卓四大组件

android四大组件分别为activity、service、contentprovider、broadcastreceiver。一、android四大组件详解1、activity(1)一个Activity通常就是一个单独的屏幕(窗口)。(2)Activity之间通过Intent进行通信。(3)android应用中每一个Activity都必须要... 查看详情

android四大组件归纳总结(代码片段)

...使用android:process="name"在Manifest中声明成独立进程Activity生命周期4种启动模式Android使用回退栈来管理Activity实例。当前显示的Activity在栈顶,当点击后退或返回时,栈顶的Activity出栈。可以指定Activity的启动模式来避免重复... 查看详情

在manifest中注册activity学习笔记

原来活动就是所说的activity。所有的活动即activity必须要在AndroidManifest.xml中进行注册才能生效在application标签下声明添加   <activity            android:name=". 查看详情

android四大组件之一——activity(代码片段)

一、Activity简介Activity是四大组件之一,用于表现功能。一个Activity通常就是一个单独的屏幕(窗口)。Activity之间通过Intent进行通信。android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统... 查看详情

binder基本使用(代码片段)

...码思路参考《Android开发艺术探索》任玉刚著)1.创建两个activity两个activity(OneActivity、TwoActivity),将OneActivity假设为服务端,TwoActivity假设为客户端,分别运行在不同进程中在AndroidManifest.xml中,为TwoActivity设置进程,这样两个act... 查看详情

android中悬浮在activity上的透明背景dialog实现(代码片段)

文章目录背景资源准备实现代码背景最近项目中有用到,且手机上很多app也会有这个功能,记录一下。资源准备这里给出实现代码前先准备一些要用到的资源文件。style资源文件style资源文件在res/values/styles.xml中声明,... 查看详情

全面解析activity:activity的工作过程

参考技术A本文将对Activity的工作过程进行分析。主要学习以下内容:(1)系统内部是如何启动一个Activity的?(2)新Activity的对象是何时创建的?(3)Activity的各个生命周日是被系统何时回调的?Activity启动流程分两种,一种是启动正在运行的... 查看详情

创建一个新的activity

1、创建一个类继承Activity类,并创建对应的布局文件,在onCreate方法中加载该布局。2、在AndroidManifest.xml声明该组件注:如果想配置一个activity在桌面上有该activity的启动图标需要在AndroidManifest.xml中配置该activity属性为<intent-filte... 查看详情

在安卓手机上看网页的时候如何实现视频嵌入页面中播放?不用flash的话

...idManifest.xml文件中声明需要使用HardwareAccelerate,可以细化到Activity级别,如果不需要的View可以声明不要用加速,但是需要在代码中做,具体如下:a.如果要声明整个应用都要加速:<application...android:hardwareAccelerated="true">b.如果要... 查看详情

android支持html5video标签,实现在线播放吗

...idManifest.xml文件中声明需要使用HardwareAccelerate,可以细化到Activity级别,如果不需要的View可以声明不要用加速,但是需要在代码中做具体如下:1如果要声明整个应用都要加速:<application...android:hardwareAccelerated="true">2.如果要在A... 查看详情

taskaffinity属性详解

...术A本篇文章的目的是为了搞清楚,哪些情况下开启一个Activity会在新的task运行,哪些情况下会继续在原来的task运行。每个Activity运行时都有一个其归属的task栈,我们可以用activity.getTaskId()的方法得到当前activity的taskId。如果两个... 查看详情

android如何播放rtsp://110.80.31.70:6000/channe1

...idManifest.xml文件中声明需要使用HardwareAccelerate,可以细化到Activity级别,如果不需要的View可以声明不要用加速,但是需要在代码中做具体如下:1如果要声明整个应用都要加速:<application...android:hardwareAccelerated="true">2.如果要在A... 查看详情

android编程中,为啥设置了intent.flag

...是一些常用的标志,不同的Flag有不同的用途。例如:FLAG_ACTIVITY_BROUGHT_TO_FRONT  这个标志一般不是由程序代码设置的,如在launchMode中设置singleTask模式时系统帮你设定。FLAG_ACTIVITY_CLEAR_TOP  如果设置,并且这个Activity已经在当... 查看详情

入门android四大开发组件学习

一、Activity组件1、Activity相关概念介绍        一个Activity包含了用户能够看到的界面,从而于用户进行交互。一个应用程序中可以有零个或者多个Activity。零个Activity就表示,这个应用程序不包含与用... 查看详情

在 Android 中启动新的 Activity 并完成当前的 Activity? [复制]

】在Android中启动新的Activity并完成当前的Activity?[复制]【英文标题】:StartnewActivityandfinishcurrentoneinAndroid?[duplicate]【发布时间】:2012-07-0317:23:38【问题描述】:目前我正在创建一个新的Activity并在当前的上调用finish。是否有任何... 查看详情

android第一行代码-activity(代码片段)

文章目录Android第一行代码Activity1、Activity基本用法2、创建和加载布局加载布局(在Activity中加载布局)在AndroidManifest文件中注册(所有的activity都要在AndroidManifest.xml中进行注册)配置主Activity(activity标签内部添加标签)在Activi... 查看详情