[英]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
,它更適合作為服務。
baseTickVar
引用baseTickVar
給CoreFunctionality
。 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.