0

我想在屏幕上显示一个计时器,并在该屏幕上显示一个TextView和一个RecyclerView。
RecyclerView包含一些Spinners。
当执行onTick()方法时,纺纱器自动关闭。微调器在CountDownTimer中设置一些文本时关闭

请为此问题提供任何解决方案。

我CountDownTimer准则

public class CountDownTimerClass extends CountDownTimer { 

    public CountDownTimerClass(long millisInFuture, long countDownInterval) { 

     super(millisInFuture, countDownInterval); 

    } 

    @Override 
    public void onTick(long millisUntilFinished) { 
     String time = String.format(Locale.US, "%02d:%02d:%02d", 
       TimeUnit.MILLISECONDS.toHours(millisUntilFinished), 
       TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - 
         TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilFinished)), 
       TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - 
         TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))); 
     mTvTimer.setText(time); 

    } 

    @Override 
    public void onFinish() { 


    } 
} 

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

    mRecyclerView = (RecyclerView) findViewById(R.id.recycleView); 
    mTvTimer = (TextView) findViewById(R.id.tv_timer); 
    mTvBlockNo = (TextView) findViewById(R.id.tv_block_no); 
    mRlHeader = findViewById(R.id.rlHeader); 

    //hit for web service. In the response i am starting timer 
    getData(Event.GET_EXPIRATION_TIME); 
} 

回答

0

肯定它的关闭,因为你调用另一个观点setText。这可能会引发焦点更改,导致Spinner关闭。

您可以通过(最好是通过XML)设置focusable为false TextView的避免这种情况,或呼吁的TextView clearFocus()setText()

+0

因此,我们可以在Textview中设置文本而不会获得焦点吗? –

+0

好问题。这可能是可能的。另一个选项可能是setText,然后以编程方式重新打开微调器。您也可以在TextView上将'focusable'设置为false。 – LukeWaggoner

+0

我认为这不会工作,因为它是CountDownTimer –

0

您应该更新您的标签或TextView的文本在UI线程,所以你的代码应该看起来像

public void onTick(long millisUntilFinished) { 
    String time = String.format(Locale.US, "%02d:%02d:%02d", 
      TimeUnit.MILLISECONDS.toHours(millisUntilFinished), 
      TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - 
        TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilFinished)), 
      TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - 
        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))); 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      mTvTimer.setText(time); 
     } 
    }); 

} 
+0

如果他从UI线程更新它,它会引发异常。 – LukeWaggoner

+0

尝试没有工作 –

+0

@FaisalKhan你可以上传一段代码,你膨胀mTvTimer吗? –