如何在类之间传递视图

时间:2013-02-11 13:08:32

标签: android

在闲暇时间,我已经在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"); 

      }   
}

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

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

我可以做myButton 静态,但这不正确使视图静态。

例如,我可以轻松地访问在扩展应用程序的类中创建的变量。观点有类似之处吗?

3 个答案:

答案 0 :(得分:2)

  

很多人/指南/文章声称是可能的,并通过使用应用程序正确地在活动之间共享对象(和字段):

这些人都是白痴,因为myButton会引入内存泄漏,除非这是非常谨慎的。

  

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

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

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

如果您的用户界面如此紧密耦合,他们绝对需要来共享小部件,那么它们不应该是单独的活动。

答案 1 :(得分:0)

视图不应在各个活动之间共享。即使你忽略了它并分享它们,你也很可能遇到WindowManager$BadTokenException,这实际上意味着你不能改变其父活动之外的视图。

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

Application application:

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

之后,使用

进行简单访问
application.myObject; //Or you could use getters and setters. Your choice.

答案 2 :(得分:0)

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

编辑:这是更多 Java Basics主题然后是Android ..根据我的理解,你称“类”是恕我直言的方法(因为你可以' t打电话给班级,因为你所描述的是什么)。

我可以给你的最佳建议:

  1. 学习Java基础知识(方法,类,对象,构造函数,继承......)
  2. 学习Android基础知识(简单的例子,1个活动,直到你理解它为好)
  3. 制作MyButton类,它将扩展标准按钮
  4. 创建按钮并更改其属性
  5. 这几项任务会让你忙一段时间。放轻松,因为以后使用复杂的应用程序会更容易。 希望我帮助过你。干杯

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

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