2011-11-09 59 views
0

我對onClickListeners修改GUI元素有一個愚蠢的問題。下面我有一個radioGroup,裏面有兩個按鈕,一個EditText和一個Spinner。當選擇了choose_old單選按鈕時,我只是想在Spinner和EditText之間切換啓用/禁用。變量select_run和new_run_name都是實例變量,從我的XML文件中獲得 。android onclicklistener GUI變化

select_run = (Spinner)runDialoglayout.findViewById(R.id.run_choice_spinner); 
new_run_name = (EditText)runDialoglayout.findViewById(R.id.new_run_name); 
RadioButton choose_old = (RadioButton)runDialoglayout.findViewById(R.id.select_old); 
RadioButton choose_new = (RadioButton)runDialoglayout.findViewById(R.id.select_new); 

choose_old.setOnClickListener(new OnClickListener(){ 
    public void onClick(View arg0) { 
    Log.e("ERROR","GOT CLICK"); 
    select_run.setEnabled(true); 
    new_run_name.setEnabled(false);   
    } 
}); 

'GOT CLICK'消息打印出來,但沒有得到所需的更改。

注:

  1. 在試圖解決方案,我已經包裹在沒有效果的handler.post圖形用戶界面的變化。
  2. 如果我設置爲在onClickListener之外啓用,它會成功更改它。

我毫不懷疑這是愚蠢的事情,但似乎無法弄清楚爲什麼發生這種情況

+0

您提供的代碼對我來說也很好。它必須在別的地方,你重寫微調器的狀態和edittext。你的XML文件是什麼樣的?你的其餘活動呢?您提供的代碼在onCreate方法中調用? – Darwind

回答

0

試着把這段代碼放在監聽器中。

boolean b = select_run.isEnabled(); 
select_run.setEnabled(!b); 
new_run_name.setEnabled(b);   
+0

有趣的是,這個工程。我很困惑這是爲什麼。 –

0

我嘗試下面的代碼似乎工作對我很好,請在訪問的onClick肯定意見被宣佈是最終的

final Button button2 = (Button)findViewById(R.id.button2); 

    final EditText et = new EditText(this); 
    et.setText("Hi There"); 

    RelativeLayout vg = (RelativeLayout)findViewById(R.id.relativeLayout1); 
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.FILL_PARENT); 
    lp.addRule(RelativeLayout.BELOW, button2.getId()); 
    vg.addView(et, lp); 


    final RadioButton rb = new RadioButton(this); 

    RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.FILL_PARENT); 
    lp1.addRule(RelativeLayout.RIGHT_OF ,button2.getId()); 
    vg.addView(rb, lp1); 
    rb.setSelected(false); 
    rb.setOnClickListener(new OnClickListener(){  
     @Override 
     public void onClick(View v) { 
      et.setEnabled(false); 
     } 
    }); 
+0

您不需要聲明視圖,即在OnClickListener中最後操作的視圖。 – Darwind

+0

感謝您的努力。 @Darwind帶來了一個有趣的觀點。你能夠儘可能簡潔地告訴我爲什麼本地範圍變量必須在onClick()和object範圍變量中不是最終的? –

+0

@ agent0range你讓我在那裏;)必須做一點挖掘找到一個合適的簡短答案;)簡短的回答是這樣的: 「規則是匿名內部類只能訪問封閉方法的最終局部變量。因爲內部類的方法可能稍後調用,在產生它的方法終止之後很久「。全局變量將壽命更長。正如我們所知道的,「最終」變量在第一次設置後不能改變。 我自己找不到一個簡短的答案,所以這是粘貼從http://mindprod.com/jgloss/nestedclasses.html - 希望這可以幫助;-) – Darwind