在编写代码时,我想使用findViewById方法查找无法在当前视图中访问但可以通过MainActivity访问的视图。所以我想到了两种选择。一种是从MainActivity类中的该对象创建一个静态方法,然后访问该静态对象。第二种方法是从MainActivity类本身( this )创建静态对象,并通过调用静态对象来访问findViewById方法。请回答我应该使用的方法。 除此之外,让我思考的是,Android开发人员是否应该遇到这种情况,或者在我处于不同观点时,是否对MainActivity中的findViewById方法进行了一些不正确的编码。 您可以在下面的仓库中查看代码。
https://github.com/chrish2015/ExpenseTrackerLatest
谢谢
答案 0 :(得分:0)
如果您位于既不是/sys/class/power_supply
也不是Context
的类中,并且需要使用活动或上下文中存在的方法,则只需将活动作为参数传递给该活动或上下文类,并在您的类中对该活动进行实例操作。
Activity
答案 1 :(得分:0)
请勿使用您的两种方法中的任何一种。
我可能误会了您的第一句话,但是可以肯定的是,当您位于Fragment里面时,您是否正在寻求一种访问MainActivity中存在的View的方法?
如果这是您的要求,那么是的,作为一名Android开发人员,肯定会在某些时候遇到这种情况。但是,通过将视图或上下文设为静态,解决方案肯定是不。
这是导致错误在整个应用程序中出现的最简单方法之一,也很有可能导致内存泄漏。这是Google的文章,内容涉及与引用上下文有关的内存泄漏:https://android-developers.googleblog.com/2009/01/avoiding-memory-leaks.html
开发人员通常会使用更好的解决方案,而不是两种选择。
首先,请记住,您不应从当前布局之外直接访问任何视图...意味着,如果您在第二个活动中,则不能直接从第一个活动访问视图活动,或者如果您处于Fragment中,则您不会直接访问属于FragmentActivity的视图。
相反,您可以让Activity或Fragment处理自己的视图。
例如,如果您在另一个活动中,并且想要更新前一个活动中的某些数据,则可以利用活动的startActivityForResult()
和onActivityResult()
获取必要的数据返回应用程序后立即更新活动。
对于Fragments,实际上有一个来自Android文档的教程,该教程描述了一种在其他Fragments之间进行交流的非常好的方法:https://developer.android.com/training/basics/fragments/communicating
此方法是将接口用作回调,因此另一个Fragment或Activity将能够接收数据并在其自己的布局内更新其视图 。
因此,对于您的情况,如果您正在使用“片段”和“活动”,则可以轻松地使片段和活动以更安全,更可靠的方式相互通信。
此外,请确保您阅读了static
上的更多内容,并且它对代码有影响,尤其是对Android组件的副作用。不要在不考虑静态可能引起的某些影响的情况下,不慎使用static,因为这会给您的代码带来无穷无尽的麻烦。