从另一个类更新Android UI组件

时间:2014-05-26 15:32:06

标签: java android

我有另一个类,需要在执行过程时在我的UI中更新进度条。 我尝试了两种方法,都将我的ProgressBar变量设置为null,所以我最终一直得到NullPointerException:

方法1)

MyClass tmp = new MyClass();
tmp.setProgressBar(myprg);    // myprg is ProgressBar variable and already have value from findViewById function

然后在MyClass中:

public void SetProgressBar(ProgressBar prg)
{
localprg = prg;   // I put breakpoint here, it's null after assignment
}

方法2)

MyClass tmp = new MyClass(container.getContext());
tmp.findProgressBar();
MyClass中的

public class void findProgressBar()
{
localprg = (ProgressBar) ((Activity)c).findViewById(R.id.progress_bar);
}

两者都失败了,两者都使localprg = null。

1 个答案:

答案 0 :(得分:0)

正如我在评论中所说的那样。在java中,所有都是通过值传递的。不是通过参考。 方法签名中的参数就像在方法存根中本地定义一样。如果您确实需要在类属性中传递和更改UI对象,请尝试将方法签名内的参数更改为AtomicReference。这不是正确的方法。 但这仍然是一个链接,这加强了我的答案:

Pass object by reference in Java

看起来,您希望在运行时流畅地增加进度条。您的类属性似乎会关注计算值,该值用于指示进度条的进度。 这不是正确的方法。

a)您通过将父对象传递给子属性来创建交叉引用。这不是一种好的做法,并且会产生强烈的耦合。

b)重度计算应该在一个自己的工作线程(非ui线程)中运行,然后通知它    ui线程通过事件与事件参数。然后,事件订阅者可以决定如何对此作出反应    事件。您可以将其视为“java事件处理”或“java观察者模式”。

c)线程?一个自己的大话题。