如何从另一个类设置TextView(不扩展到Activity.class)

时间:2012-11-21 07:52:11

标签: android

我有一个关于从不是Activity的子类的类设置TextView的问题。该类主要用于处理第三方服务器的注册和REST请求。

从第三方服务器获取文本字段信息后,在主活动中设置TextView为时已晚。

  • 我无法使用SharedPreferences设置此信息,因为MainActivity已经开始。
  • 我无法通过Bundle传递此信息,因为我的java类不是活动类。

如何传递此信息并在MainActivity中设置TextView?有没有办法做到这一点?

3 个答案:

答案 0 :(得分:2)

这样做的正确方法是创建一个监听器。

创建一个界面:

public interface OperationCompletedListener{
void onOperationCompleted(String resultValue);
}

然后在你的类中调用Rest服务,为这个监听器创建一个变量,并设置一个方法来设置它。

private OperationCompletedListener mListener;

public void setOperationCompletedListener(OperationCompletedListener listener){
mListener=listener;
}

然后当您的休息服务完成如下呼叫时:

if(mListener!=null){
mListener.onOperationCompleted("your value to be passed");
}

然后在包含TextView的activity类中,创建一个OperationCompletedListener对象,并使用我们之前创建的set方法将其设置为另一个类。然后在onOperationCompleted方法中,使用您的值设置文本视图,您就完成了。

private OperationCompletedListener mOperationCompletedListener=new OperationCompletedListener() {

    @Override
    public void onOperationCompleted(String resultValue) {
        yourTextView.setText(resultValue);
    }
};

restServiceClassObject.setOperationCompletedListener(mOperationCompletedListener);

答案 1 :(得分:0)

您可以创建一个静态方法,用于更新活动类中的textview。然后随时从其他课程中调用此方法。

答案 2 :(得分:0)

在实例化时,尝试将Activity传递给非Activity class。例如:

public class NonActivityClass {
    private Activity parentActivity;
    public NonActivity(Activity parentActivity) {
        this.parentActivity = parentActivity;
    }
}

或者,如果您不想将Activity实例化(NonActivityClass),您可以将abstract传递给TextView中的静态方法。然后,您可以从父级中提升findViewById或执行{{1}}并设置文本。

根据我的经验,您绝不应使用静态非最终变量来维护跨活动的引用。当您重新启动应用程序或手机时,或者当Android终止您应用程序的进程时,变量的引用和状态将丢失,并可能导致您的应用程序崩溃。