首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法获得TextView值

无法获得TextView值
EN

Stack Overflow用户
提问于 2015-03-05 12:18:38
回答 2查看 67关注 0票数 0

我有一个TextView,它在活动A中显示倒计时计时器,倒计时计时器的功能在B类中,在活动A中:

代码语言:javascript
复制
TextView tvTime = (TextView) findViewById(R.id.tv_time);
B a = new B(tvTime);
a.startTimer(20000);

在B类中:

代码语言:javascript
复制
public B(TextView tvTime)
{
 this.tvTime = tvTime;
}

//倒数计时器

代码语言:javascript
复制
   public void startTimer(int t) {

   Log.d("Timer Value outside cdt", ""+t); 
    timer = new CountDownTimer(t, 1000) {

        public void onTick(long millisUntilFinished) {
            tvTime.setText(""+millisUntilFinished
                    / 1000;);

            Log.d("Timer Value outside cdt", ""+millisUntilFinished
                    / 1000;);
        }

        public void onFinish() {
            tvTime.setText("000");
        }

    };
    timer.start();


}

它工作得很好,但是当我试图通过使用下面的代码来保存tvTime值时,它不起作用了。

代码语言:javascript
复制
 public void saveGame(){
    time = tvTime.getText().toString();
    spEdit.putString(SAVED_TIME, time);
    spEdit.commit();
}

编辑:

通过添加2条调试语句,我发现问题不在于保存值,而是在获取存储值时调用startTimer()时存在的问题

代码语言:javascript
复制
public void getGame(){
startTimer(Integer.valueOf(sp.getString(SAVED_TIME, "0000")));
}

调用这个func之后,我可以看到

代码语言:javascript
复制
   Log.d("Timer Value outside cdt", ""+t); 

但是第二次声明没有显示结果

代码语言:javascript
复制
            Log.d("Timer Value outside cdt", ""+millisUntilFinished
                    / 1000;);
EN

回答 2

Stack Overflow用户

发布于 2015-03-05 12:22:14

若要在SP中存储值,请执行以下操作:

代码语言:javascript
复制
 time = tvTime.getText().toString();
Editor editor = sharedpreferences.edit();
      editor.putString("NAME", time );
    editor.commit();

要从SP检索数据:

代码语言:javascript
复制
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
String name= prefs.getString("NAME", null);
票数 1
EN

Stack Overflow用户

发布于 2015-03-05 12:37:32

确保您的textview's object is accessible in the particular method,它可能超出了您的方法的范围。如果可能的话,可以在class level中声明textview对象,这样类的所有方法都可以使用

代码语言:javascript
复制
public class yourclass 
{
    TextView tvTime;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //--- text view---
        TextView txtView = (TextView) findViewById(R.id.text_id);
}

public void saveGame(){
    time = tvTime.getText().toString();//now you can use your textview here
    spEdit.putString(SAVED_TIME, time);
    spEdit.commit();
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28877727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档