簡體   English   中英

Java:如何在另一個包中執行TextView.setText?

[英]Java: How to do TextView.setText in another package?

我是Java新手,正在嘗試在Android Studio中構建一些東西。 關鍵是要從另一個類CoreFunctionality所在的PACKAGE中“推送” BaseScreen類中TextView baseTickVar的值。 每次tickNumber增加時,我都希望在TextView中顯示它,因此這不是一次性設置文本。

我已經嘗試過接口,但是接口將不允許變量,僅允許常量。 我已經嘗試過CoreFunctionality包中的TextView.setText,但是它給出了nullpointerException並聲明了TextView來對抗似乎沒有幫助。

public class BaseScreen extends Activity implements View.OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_base_screen);

    // some irrelevant code here so i left it out.

    TextView baseTickVar = (TextView)findViewById(R.id.baseTickVar);        
    baseTickVar.setText("1"); // just to not have it empty...

}

現在,我想使用另一個包CoreFunctionality中的變量設置baseTickVar的值

public class CoreFunctionality extends Activity implements Runnable {

Thread tickThread = null;
volatile boolean playingGalactic;
long lastTick;
public int tickNumber;
int tickLength;
TextView baseTickVar;

public void controlTicks() {

    tickLength = 2000;
    long timeThisTick = (System.currentTimeMillis() - lastTick); 
    long timeToWait = tickLength - timeThisTick; 
    if (timeToWait > 0) {
        try {
            tickThread.sleep(timeToWait);
        } catch (InterruptedException e) {
        }
    }
    lastTick = System.currentTimeMillis();
}

@Override
public void run() {

    while (playingGalactic) {
        controlTicks();
        tickNumber++;
        Log.i("Tick number ", "" + tickNumber);
        updateTick();
    }
}

private void updateTick() {
    // this is the whole point...
    baseTickVar.setText("" + tickNumber);
}

public void resume() {
    playingGalactic = true;
    tickThread = new Thread(this);
    tickThread.start(); 

}

我猜您的BaseScreen是主屏幕,而CoreFunctionality是正在執行某些工作的某些組件。 實際上, CoreFunctionality不必是Activity ,它更適合作為服務。

  1. 您必須以某種方式baseTickVar引用baseTickVarCoreFunctionality
  2. 不允許從另一個線程中弄亂UI元素(例如TextView )。 您應該考慮使用一些線程間通信(例如Message )。

使BaseScreen擴展Handler或在其中創建Handler對象,然后覆蓋

public void handleMessage(Message msg) {
    baseTickVar.setText("" + msg.obj);
}

CoreFunctionality

private void updateTick() {
    Message msg=new Message();
    msg.obj=tickNumber;
    h.sendMessage(msg);
}

當然,您必須將h引用傳遞給CoreFunctionality

也許不是100%准確,但應該稍作調整即可。 希望這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM