2015-04-19 47 views
0

正如你可以看到的方法refreshProgressBars()只工作一次,虽然Toast创建没有中断。 这怎么可能?为什么Runnable中的方法只能运行一次?

bREnemyRegeneration = new Runnable() { 
      @Override 
      public void run() { 
       refreshProgressBars(); //method works only 1 time 
       Toast.makeText(//works always 
         BattleActivity.this, 
         "THIS TOAST WILL BE SHOWN", 
         Toast.LENGTH_SHORT).show(); 
       bHandlerTimers.postDelayed(bREnemyRegeneration, 3000); //start new iteration of this Runnable 
      } 
     }; 

万一方法refreshProgressBars()

public void refreshProgressBars(){ 
    checkDeath(); 
    if (bHealthsBar.getLayoutParams().width < 30) bHealthsBar.getLayoutParams().width = 0; 
    else bHealthsBar.getLayoutParams().width = (int) (PB_EN_HP_WIDTH * bEnemy.getHealth(false)/bEnemy.getHealth(true)); 
} 

Runnable的电话如下:

bHandlerTimers = new Handler(); 
bHandlerTimers.post(bREnemyRegeneration); 
+0

事实证明,方法_refreshProgressBar()_总是工作,但**健康栏宽度只改变一次**,如何使它始终改变? – Dionis

回答

0

我的编辑方法refreshProgressBar()如下: 相反 bHealthsBar.getLayoutParams().width = bWidth 我用 bHealthsBar.setLayoutParams(new RelativeLayout.LayoutParams(bWidth, bHealthsBar.getLayoutParams().height));

而且......所有的作品!问题已关闭。

+0

当系统让你这样做时,标记答案已解决。 – Axxiss

+0

'setLayoutParams'意味着调用'requestLayout()'这就是你需要的。 –

相关问题