【问题标题】:What is the Object of a Activity called by an IntentIntent 调用的 Activity 的对象是什么
【发布时间】:2016-02-13 00:35:37
【问题描述】:

当我通过 Intent 启动 Activity 时,我想知道它的 Object 是什么。

这意味着:我如何调用活动活动的对象。还是我弄错了什么,而 Activity istn 由 Object 表示?

示例:在 MainActivity 我做:

ShowExampleScreen = new Intent(MainActivity.this, ExampleClass.class);
startActivity(ShowExampleScreen);

public class ExampleClass{

    oncreate( Stuff in on create)

    public void myFunction(){ my stuff} 
}

如何在其他类中使用 myFunc 而不声明它是静态的? 如何获取 Intent 启动的 Activity 的对象?

【问题讨论】:

  • 为什么需要Intent启动的activity的对象。当 Intent 被触发时,它将启动由 ExampleClass 表示的 Activity。确保 ExampleClass 扩展了 Activity 并在清单文件中声明它
  • 是的,活动如愿开始,但例如,当我希望 myFunc 成为文本字段设置器类并且我想从其他地方调用它时,我必须创建一个 ExampleClass 的对象。我希望这个对象是 Intent 启动的对象,所以我可以设置在活动视图中显示的文本视图
  • 您期望得到什么答案?您不应该从其他活动中调用活动方法
  • 你的要求是不可行的。考虑将“我的东西”的值作为 Intent extra 传递,以便 Activity 可以用它做一些事情。
  • 对不起,我对 android 还很陌生,正在做我的第一步。所以你会说,我做一个我做计算和文本视图的类,然后在视图中我只是引用这些对象?

标签: android class android-intent


【解决方案1】:

有多种方法可以做到这一点,以下是我使用的几种方法:

  • 来自另一个类/方法:

    只需将 Activity 作为参数传递,因为您需要最新的 Activity 对象,所以您不希望将其存储在一旦 Activity 被销毁后它可能变为 null 的地方。

  • 来自一个在其他类中很深的方法:

    我真的不推荐这样做,但我有时会这样做,只需在 Activity 本身中创建 Activity 的静态对象,并确保每次更新 Activity 时都分配它,比如说在 onResume 方法或 onCreate

    public static Activity app; //in your Activity as a field (instance variable)
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        app = this;
     }
    
  • 来自片段:

    MyActivity app = (MyActivity) getActivity(); //getActivity() 是一个 Fragment 方法。

【讨论】:

  • 谢谢,我想第一个就是答案。我现在通过创建一个底层数据存储类来解决这个问题,我在主 Activity 启动时创建了一个对象。然后我的第二个屏幕活动只是从底层数据对象中收集数据。所以我不需要处理这个活动对象的东西。你能告诉我哪种方法是“更干净”的方式吗?
  • 最好的方法是像以往一样作为参数传递。这是最安全的方式,但有时您需要另一种方式,所以这取决于您,但您需要小心并做好记录。
【解决方案2】:

在 Android 中,Activity 生命周期是这样工作的:

我建议您开始 reading from here 以首先清除基础知识。

根据指南,您不应从另一个 Activity 调用一个 Activity 的方法

但是,您可以使用 startActivityForResult 。即您可以启动活动并返回结果。 See this 用于实现

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多