我有一个关于从不是Activity的子类的类设置TextView的问题。该类主要用于处理第三方服务器的注册和REST请求。
从第三方服务器获取文本字段信息后,在主活动中设置TextView为时已晚。
如何传递此信息并在MainActivity中设置TextView?有没有办法做到这一点?
答案 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终止您应用程序的进程时,变量的引用和状态将丢失,并可能导致您的应用程序崩溃。