2015-05-13 167 views
2

當用戶單擊菜單中的項目時,onOptionsItemSelected觸發傳遞MenuItem作爲參數。這通過MenuItem延伸TextView和我們可以從menu.findItem()方法得到不一樣。 要訪問此用戶需要單擊該項目,我想訪問此對象,而無需用戶單擊菜單中的項目。以編程方式訪問MenuItem以更改文本顏色

回答

2

在恢復中,只需調用findViewById並將其轉換爲TextView。 您需要在計時器中進行此操作,以便後續延遲您的代碼,直到視圖變爲由菜單渲染爲止。 對我來說是這樣的

if (!created) { // for first resume only 
     created = true; 
     Timer t = new Timer(); 
      t.schedule(new TimerTask() { // Might be done in better way, dont know yet 
      @Override 
      public void run() { 
       try { 
        while true { 
         final Object o = findViewById(R.id.mServerTime); 
         if (o == null) { 
          try { 
           Thread.sleep(1000); 
          } catch (Exception exp) { 
          } 
         } else { 
          if (o != null && o instanceof TextView) { 
           runOnUiThread(new Runnable() { 
            @Override 
            public void run() { 
             ((TextView) o).setTextColor(Color.WHITE); 
            } 
           }); 
          } 
          break; 
         } 
        } 
       }catch (Exception exp) {} 
      } 
     },1000); 
0

我不能發佈在上面的答覆意見,所以我在寫另一個答案。知道何時該視圖被實際放置在屏幕上的更可靠的方法是觀察它的ViewTreeObserver如:

public class ActivityMain extends Activity { 
    // Instance variables 
    OnLayoutReadyListener onLayoutReadyListener = new OnLayoutReadyListener(); 
    View v; 

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

     v = findViewById(R.id.mServerTime); 
     v.getViewTreeObserver().addOnGlobalLayoutListener(onLayoutReadyListener); 
    } 

    class OnLayoutReadyListener implements ViewTreeObserver.OnGlobalLayoutListener { 
     @Override 
     public void onGlobalLayout() { 
      // this will be called once view V is placed and measured on the screen 
      v.setTextColor(Color.WHITE); 
      // remove this listener to prevent any additional callbacks 
      v.getViewTreeObserver().removeOnGlobalLayoutListener(onLayoutReadyListener); 
     } 
    } 
} 
+0

V = findViewById(R.id.mServerTime);將在onCreate中返回null。 –

相關問題