英文:
Get TextView from another class for countdown
问题
我已经创建了一个类来进行倒计时,并将其用于将格式化的时间返回为TextView。然而,我无法使时间显示出来。当我不是调用getTime()方法而是使用一个字符串时,它可以正常显示。
主要方法如下:
setContentView(R.layout.activity_main);
matchTime = findViewById(R.id.match_Time);
playTime = new Play();
matchTime.setText(playTime.getPlayTime());
而我的Play类如下:
//其他实现
private void updatePlay() {
int minutes = (int) (timeUntilEnd / 1000) / 60;
int seconds = (int) (timeUntilEnd / 1000) % 60;
timeUntilEndFormated = String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds);
playTime.setText(timeUntilEndFormated);
}
public TextView getPlayTime() {
return playTime;
}
英文:
I've created a class to make a countdown and used it to return the formated time as a TextView. However, I'm not beeing able to get the time to be exibed on in place. When, instead of calling the method getTime() I use a string, it shows fine.
The main method is like this:
setContentView(R.layout.activity_main);
matchTime = findViewById(R.id.match_Time);
playTime = new Play();
matchTime.setText(playTime.getPlayTime());
While my class Play goes like this:
//Other implementations
private void updatePlay() {
int minutes = (int) (timeUntilEnd/ 1000) / 60;
int seconds = (int) (timeUntilEnd/ 1000) % 60;
timeUntilEndFormated= String.format(Locale.getDefault(),"%02d:%02d", minutes, seconds);
playTime.setText(timeUntilEndFormated);
}
public TextView getPlayTime() {
return playTime;
}
答案1
得分: 0
看起来你正在将matchTime的文本设置为一个TextView。
setText是一个应该接收String而不是TextView对象的方法。
但是,如果你只是在getPlayTime()中简单地返回一个String,updatePlay()不起作用,因为playTime.setText()不会影响matchTime。
为了解决这个问题,你可以将matchTime传递给Play的构造函数,然后直接更新它:
public class Play{
private TextView matchTime;
public Play(TextView matchTime){
this.matchTime = matchTime;
}
private void updatePlay() {
int minutes = (int) (timeUntilEnd/ 1000) / 60;
int seconds = (int) (timeUntilEnd/ 1000) % 60;
timeUntilEndFormated= String.format(Locale.getDefault(),"%%02d:%%02d", minutes, seconds);
matchTime.setText(timeUntilEndFormated);
}
}
然后你只需要在主方法中这样做:
playTime = new Play(matchTime);
playTime.updatePlay();
在将TextView传递给其他对象时要小心。这可能会导致内存泄漏,因为TextView持有你的Context的实例。为了避免内存泄漏,你必须在activity的onDestroy()方法中释放对象:
public void onDestroy() {
super.onDestroy();
playTime = null;
}
英文:
It looks like you are setting the text of matchTime to a TextView.
setText is a method that should receive a String, not a TextView object.
But, if you simply return a String in getPlayTime(), updatePlay() wont work because playTime.setText() wont affect matchTime at all.
To solve this you pass matchTime to Play's constructor, and then update it directly:
public class Play{
private TextView matchTime;
public Play(TextView matchTime){
this.matchTime = matchTime;
}
private void updatePlay() {
int minutes = (int) (timeUntilEnd/ 1000) / 60;
int seconds = (int) (timeUntilEnd/ 1000) % 60;
timeUntilEndFormated= String.format(Locale.getDefault(),"%02d:%02d", minutes, seconds);
matchTime.setText(timeUntilEndFormated);
}
}
And then you only need to do this in your main method:
playTime = new Play(matchTime);
playTime.updatePlay();
Be careful with passing TextView's to other objects. This can create a memory leak, since TextView holds an instance of your Context. To avoid memory leaks you have to release the object in your activity's onDestroy() method:
public void onDestroy() {
super.onDestroy();
playTime = null;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论