2013-11-05 23 views
6

Tôi rất mới phát triển Android. Cố gắng thực hiện một điều gì đó khá đơn giản - thay đổi một số văn bản được hiển thị khi một bộ đếm thời gian được đánh dấu. Dưới đây là các mã có khả năng liên quan:Thay đổi văn bản của TextView - văn bản cũ không biến mất (Android 4.1.2)

CountDownTimer currentTimer; 
Resources res; 
TextView timerText; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_exercise); 
    res = getResources(); 

    timerText = (TextView) findViewById(R.id.timer_text); 
} 

@Override 
protected void onStart() { 
    super.onStart(); 

    //"Get ready" countdown 
    currentTimer = new CountDownTimer(5000, 1000) { 
     @Override 
     public void onTick(long millisUntilFinished) { 
      timerText.setText("" + (int)Math.ceil(millisUntilFinished/1000.0)); 
     } 

     @Override 
     public void onFinish() { 
      ... 
     } 
    }; 

    currentTimer.start(); 
} 

này hoạt động tốt trên một mô phỏng 4.2.2 thiết bị, nhưng trên một thiết bị 4.1.2 (cả về thể chất và mô phỏng), các TextView thay đổi xuất hiện như vậy trong khi số tiền thu được đếm ngược:

Changed TextView

Nếu bạn không thể biết, đó là số 5,4,3 được xếp chồng. Vì vậy, khi tôi thiết lập một chuỗi mới cho TextView, chuỗi mới được hiển thị nhưng không thay thế chuỗi cũ. Bất kỳ TextView nào khác được sử dụng trong ứng dụng của tôi đều hoạt động theo cùng một cách.

Bất kỳ ý tưởng nào về sự cố và cách khắc phục sự cố?

Sửa: Từ file layout XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context=".ExerciseActivity" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:keepScreenOn="true" 
    android:orientation="vertical" > 

    ... 

    <TextView 
     android:id="@+id/timer_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:textIsSelectable="false" 
     android:hint="@string/timer_default" /> 

    ... 

</LinearLayout> 

Đó là tất cả những gì có thể có liên quan.

+1

Đảm bảo rằng bạn thay đổi văn bản trong Chủ đề giao diện người dùng. Trong Thread nào 'onTick()' đang chạy? – SimonSays

+0

Đăng tệp XML bố cục của bạn. – Squonk

+1

thử 'timerText.invalidate();' sau khi đặt văn bản. – 323go

Trả lời

0

public class MainActivity mở rộng Hoạt động {

TextView timerText; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    timerText = (TextView) findViewById(R.id.timer_text); 
} 

@Override 
protected void onStart() { 
    super.onStart(); 

    CountDownTimer currentTimer = new CountDownTimer(5000, 1000) { 
     @Override 
     public void onTick(long millisUntilFinished) { 
      timerText.setText("" + (int) Math.ceil(millisUntilFinished/1000.0)); 
     } 

     @Override 
     public void onFinish() { 
     } 
    }; 

    currentTimer.start(); 
} 

}

Thử nghiệm trên 4.1.2 Emulator và giải quyết.

Tôi đoán là biến tham chiếu cuối cùng đang gây ra sự cố.

+0

Cảm ơn bạn, nhưng kỳ lạ vấn đề vẫn tồn tại đối với tôi. Tôi đã tạo currentTimer cục bộ và rút ra phạm vi của timerText, cũng như thêm @Override vào các phương thức hẹn giờ, như trong mã của bạn, nhưng không có xúc xắc. –

Các vấn đề liên quan