3 回答

TA貢獻1794條經驗 獲得超8個贊
前兩個示例要求TextView直接在另一個類中使用。但是,在某些情況下,TextView其他類中不應出現,例如,您ClassB用于更新各種Activity,其中一些activity更新了TextViews,而另一些可能更新了EditTexts。
因此,下面的解決方案可以指導您如何將您的TextView課程與其他課程脫鉤,但是,您仍然可以實現所需的內容。它使用接口方法。
首先,聲明一個接口,您可以在其中ClassB與活動進行通信,然后調用它MyCallback:
public interface MyCallback {
// Declaration of the template function for the interface
public void updateMyText(String myString);
}
接下來,在Activity中,實現MyCallback,從而實現其功能定義。在此函數中,您將收到ClassB可以執行任何操作的字符串,例如,更新TextView(或EditText等):
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);
}
}
最后,您可以聲明ClassB接管MyCallback(即,您的Activity類對象也是MyCallback)。從那里,您可以用來ClassB與Activity通信,并TextView通過updateMyText功能來更新它:
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);
}
}
}
希望這有助于更好地顯示將Activity與正確解耦的體系結構ClassB。

TA貢獻1871條經驗 獲得超8個贊
您必須通過構造函數傳遞Context引用。
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");
}
添加回答
舉報