2

在空闲时间,我已经在 android 上工作了几个月,所以我可能会问一些愚蠢的问题。

在一个类中,我创建了一个对象,例如一个按钮,并且我想从其他类中“访问”它。

当然我可以这样做:

public class CreateButton{

      public void createButton(){

         Button myButton = new Button(context);         

        //I can "pass" my object to another class this way
        ManageButton manageButton = new ManageButton(myButton);

        // or this way
        manageButton.writeButtonTextMethod(myButton); 

     }
}

或者这样

public class CreateButton{

      public Button createButton(){

        Button myButton = new Button(context);
        return myButton;

      }

}


public class ManageButton{

      public void writeButtonTextMethod(){

        CreateButton createButton = new CreateButton()     
        Button myButton = createButton.createButton();
        myButton.setText("W"); 

      }   
}

我想知道是否有办法直接从ManageButton.class(和其他类)在createButton.class中创建“到达”myButton。

使用上面的代码,我必须 从 ManageButton.class中“调用” createButton.class ,反之亦然,才能管理 myButton。

我可以将 myButton 设为静态,但将视图设为静态是不正确的。

例如,我可以轻松访问在扩展Application的类中创建的变量。视图有类似的东西吗?

4

3 回答 3

2

许多人/指南/文章声称可以通过使用应用程序在活动之间正确共享对象(和字段),这种方式:

这样的人是白痴,myButton除非非常小心,否则会引入内存泄漏。

所以,我仍然不确定我应该如何在不同的活动之间共享对象(TextView、Button、ImgaeView 等)。

您不会在活动之间共享小部件。最多,您在活动之间共享模型数据(或者更好的是,指向集中存储的模型数据的指针)。

在 Web 应用程序中,您不会在 Web 页面之间共享 DOM 节点,因为这是不可能的。您最多可以在网页之间共享作为 GET 参数等传递的数据,或者将数据存储在本地中央存储(cookie、本地存储、IndexedDB 等)中。Android 活动就像网页——它们是松散耦合的。

如果您的 UI 片段耦合得如此紧密,以至于它们绝对需要共享小部件,那么它们不应该是单独的活动。

于 2013-02-11T13:13:28.867 回答
0

视图并不意味着在活动之间共享。即使您确实无视并共享它们,您也很可能会遇到 a WindowManager$BadTokenException,这本质上意味着您无法在其父 Activity 之外更改 Views。

但是,要以更一般的方式回答您关于共享非视图对象的问题,Application 类是正确的方法。但是,将对象设为静态并不是正确的做法。相反,使它们成为实例变量,并在您的各种活动中使用以下方法访问它们:

Application application:

//Below line is in onCreate()
application = this.getApplication();

之后,使用简单的访问它

application.myObject; //Or you could use getters and setters. Your choice.
于 2013-02-11T13:15:23.763 回答
0

不太清楚为什么要在两个活动之间共享一个按钮?!它是 ActivityA 还是 ActivityB 中的按钮?没有必要,或者用来做它..你不应该这样做。

编辑:这是更多的Java基础主题然后是Android ..据我了解,你称“类”是恕我直言的方法(因为你不能调用类,因为你描述了什么)。

我可以在这里给你最好的建议:

  1. 学习 Java 基础知识(方法、类、对象、构造函数、继承..)
  2. 学习 Android 基础知识(有 1 个活动的简单示例,直到你很好地理解它)
  3. 制作将扩展标准按钮的 MyButton 类
  4. 创建按钮并更改其属性

这几项任务会让你忙一段时间。放轻松,因为稍后使用复杂的应用程序会更容易。希望我对你有所帮助。干杯

EDIT2:在你写的最后一个例子中(在这个答案的评论中),没有任何意义,因为我们之前写了你,你没有在两个活动之间共享按钮。暂停!再读一遍: 你不应该在两个 Activies 之间共享按钮。你问的问题不清楚,因为对于 A 和 Z,你不能只说他们之间的课程和“分享”按钮。哪一堂课?没有写任何代码,所以很难弄清楚你想要什么..:s

最后最后一次编辑:伙计.. 请理解您缺少 Java 基础知识。这里没有恶意,只是试着指导你并告诉你你应该学习什么。为什么?因为当类使用一个名称完全相同的方法时,你很困惑地解释你的意思并不令我感到惊讶。它们只是“做某事”的对象,你想通过在构造函数中添加变量来“管理”它们不存在等。学习,下次立即编写代码以节省我们所有人的时间。干杯,享受学习

于 2013-02-11T13:17:13.557 回答