如何从其他类更新活动的 TextView

2022-09-01 04:47:10

我是Android / Java编程的新手。我有两个类,一个是普通类,另一个是普通类。我的活动类包含 .我可以从普通类更新活动类吗?我尝试使用随机代码,但它失败了。ActivityTextViewTextView

// activity class
public class MainMenu extends Activity {
    public TextView txtView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView txtView = (TextView)findViewById(R.id.text);   
    }
}

// Other class
public class ClassB {
    public ClassB() {
        public void Update() {
            TextView txtView = (TextView)findViewById(R.id.text);
            txtView.setText("Hello");
        }
    }
}

答案 1

您必须通过构造函数传递上下文引用。

public class ClassB {
   Context context;
   public ClassB(Context context){
     this.context=context;
   }

   public void Update(){
        TextView txtView = (TextView) ((Activity)context).findViewById(R.id.text);
        txtView.setText("Hello");
   }

答案 2

前面的两个示例需要直接在另一个类中使用。但是,在某些情况下,其他类中不应存在,例如,您用于更新各种活动,其中某些活动更新 s,而其他活动可能会更新 s。TextViewTextViewClassBTextViewEditText

因此,下面的解决方案可以指导您如何将您与其他类分离,但是,您仍然可以实现所需的目标。它使用接口方法。TextView

首先,声明一个可以与活动通信的接口,并调用它:ClassBMyCallback

public interface MyCallback {
    // Declaration of the template function for the interface
    public void updateMyText(String myString);
}

接下来在活动中,实现 ,从而定义其函数。在此函数中,您将收到字符串,您可以从中执行任何您喜欢的操作,例如,更新(或,等):MyCallbackClassBTextViewEditText

public class MyActivity extends AppCompatActivity implements MyCallback {
    // ... whatever code of your activity

    @Override
    public void updateMyText(String myString) {
        ((TextView)findViewById(R.id.text)).setText(myString);
    }
}

最后,您可以声明 接受(即,您的 Activity 类对象也是 )。从那里,您可以使用它来与 Activity 通信,并通过函数获取它来更新它:ClassBMyCallbackMyCallbackClassBTextViewupdateMyText

public class ClassB {
    MyCallback myCallback = null;

    public ClassB(MyCallback callback) {
        this.myCallback = callback;
    }

    public void doSomething() {
        // Do something to get String
        String myString = str;

        if (myCallback != null) {
            myCallback.updateMyText(myString);
        }
    }
}

希望这有助于更好地显示将活动与 正确分离的架构结构。ClassB


推荐