亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從另一個類更新活動的TextView

如何從另一個類更新活動的TextView

翻閱古今 2019-12-27 15:41:32
我是Android / Java編程的新手。我有兩個班,一個是Activity普通班。我的活動課程包含一個TextView。我可以TextView從普通班更新活動班的嗎?我嘗試使用隨機代碼,但失敗了。// activity classpublic class MainMenu extends Activity {    public TextView txtView;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        TextView txtView = (TextView)findViewById(R.id.text);       }}// Other classpublic class ClassB {    public ClassB() {        public void Update() {            TextView txtView = (TextView)findViewById(R.id.text);            txtView.setText("Hello");        }    }}
查看完整描述

3 回答

?
慕田峪9158850

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。


查看完整回答
反對 回復 2019-12-27
?
ITMISS

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");

   }


查看完整回答
反對 回復 2019-12-27
  • 3 回答
  • 0 關注
  • 769 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號