2015-06-12 31 views
0

我有一個textview,2個複選框,2個RadioButtons。我選擇或取消選擇什麼項目應該在textview上更新 - 我該如何實現?我知道我們可以用其他方法來解決問題,但如果問題變得複雜,該怎麼辦?例如,如果我有10個複選框和10個單選按鈕 - 我是否必須爲所有視圖編寫條件?如何根據我的選擇更新我的Texview

這裏是我的代碼看起來

public class MainActivity extends Activity { 

TextView textview; 
CheckBox checkbox1; 
CheckBox checkbox2; 
RadioGroup group1; 
RadioButton radio1; 
RadioButton radio2; 
static String displayText=""; 


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

    textview = (TextView) findViewById(R.id.textView); 

    checkbox1 = (CheckBox) findViewById(R.id.checkBox); 
    checkbox2 = (CheckBox) findViewById(R.id.checkBox2); 
    radio1 = (RadioButton) findViewById(R.id.radioButton); 
    radio2 = (RadioButton) findViewById(R.id.radioButton2); 

    group1 = (RadioGroup) findViewById(R.id.radio_group_1); 
    checkbox1.setOnClickListener(new checkBoxClicked()); 
    checkbox2.setOnClickListener(new checkBoxClicked()); 


    radio1.setOnClickListener(new checkBoxClicked()); 
    radio2.setOnClickListener(new checkBoxClicked()); 
    textview.setText(displayText); 
    class checkBoxClicked implements View.OnClickListener 
{ 

@Override 
public void onClick(View v) { 

     if(radio1.isChecked()) 
     { 
      displayText="radio1"; 
     } 
     if(radio2.isChecked()) 
     { 
      displayText="radio2"; 
     } 

     if(checkbox1.isChecked()) 
     { 
      displayText= "checkbox1"; 
     } 
     if(checkbox2.isChecked()) 
     { 
      displayText="checkbox2"; 

     } 
     if(checkbox1.isChecked()&&checkbox2.isChecked()) 
     { 
      displayText="checkbox1" + "checkbox2"; 

     } 
     if(checkbox1.isChecked()&&radio1.isChecked()) 
     { 
      displayText="checkbox1"+"radio1"; 
     } 
     if(checkbox1.isChecked()&&radio2.isChecked()) 
     { 
      displayText="checkbox1"+"radio2"; 
     } 
     if(checkbox2.isChecked()&&radio1.isChecked()) 
     { 
      displayText="checkbox2"+"radio1"; 
     } 
     if(checkbox2.isChecked()&&radio2.isChecked()) 
     { 
      displayText="checkbox2"+"radio2"; 
     } 
     if(radio1.isChecked()&&checkbox1.isChecked()&&checkbox2.isChecked()) 
     { 
      displayText="radio1"+"checkbox1"+"checkbox2"; 
     } 
     if(radio2.isChecked()&&checkbox1.isChecked()&&checkbox2.isChecked()) 
     { 
      displayText="radio2"+"checkbox1"+"checkbox2"; 
     } 

     if(!checkbox1.isChecked()&&!checkbox2.isChecked()&&!radio1.isChecked()&&!radio2.isChecked()) 
     { 
      displayText=""; 
     } 
     textview.setText(displayText); 
}}} 

回答

0

我會用你現在擁有的if-else情況,但使用一個StringBuffer來代替的情況下,爲每個不同的元組

 StringBuffer sb = new StringBuffer(); 
     if(radio1.isChecked()) 
     { 
      sb.append("radio1"); 
     } 
     if(radio2.isChecked()) 
     { 
      sb.append("radio2"); 
     } 

     if(checkbox1.isChecked()) 
     { 
      sb.append("checkbox1"); 
     } 
     if(checkbox2.isChecked()) 
     { 
      sb.append("checkbox2"); 
     } 
     textview.setText(sb.toString()); 

這樣您只需要每個複選框/單選按鈕1個案例

+0

發誓!減少我所有的努力!謝謝 – Govarthanan

+0

不是問題!很高興它有幫助! –

1

給這個鏡頭..它應該爲您提供與您的代碼相同的功能(除了無線電值將始終位於displayText字符串)代碼少得多。

displayText = ""; 

if(radio1.isChecked){ 
    displayText = "radio1"; 
}else if(radio2.isChecked){ 
    displayText = "radio2"; 
} 

if(checkbox1.isChecked){ 
    displayText += "checkbox1"; 
} 

if(checkbox2.isChecked){ 
    displayText += "checkbox2"; 
} 

textview.setText(displayText); 
+0

不,這不起作用,我實際上做了你所說的,但它沒有給出正確的答案,如果我取消選中checkbox1,它將不會從textview中刪除值,因爲如果我們開始實施,沒有任何其他語句這樣,我們最終將擁有和我一樣的邏輯。感謝您的時間 – Govarthanan

+0

您是否在onClick方法的開頭添加了「displayText =」「'行?它應該清除textView,然後只添加檢查的值。 噢,也許我誤解了你的情況。 – ryguy

+1

哦,對不起,是的,你的權利,我忘了執行displayText =「」,它現在的作品!謝謝 – Govarthanan

0

在您的主要活動:

LinearLayout layout; 
TextView textview; 
CheckBox checkbox1; 
CheckBox checkbox2; 
RadioGroup group1; 
RadioButton radio1; 
RadioButton radio2; 
static String displayText=""; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

setContentView(R.layout.activity_main); 

layout = (LinearLayout) findViewByID(R.id.linearlayout); 
StringBuffer sb = new StringBuffer(); 
checkbox1 = (CheckBox) findViewById(R.id.checkBox); 
checkbox2 = (CheckBox) findViewById(R.id.checkBox2); 
radio1 = (RadioButton) findViewById(R.id.radioButton); 
radio2 = (RadioButton) findViewById(R.id.radioButton2); 
textview = (TextView) findViewById(R.id.textView); 
} 

的onClick(假設的LinearLayout是父母所有的單選按鈕和複選框):

public void onClick() { 
StringBuffer sb = new StringBuffer(); 
for (int i=0; i < layout.getChildCount(); i++){ 
     View v = layout.getChildAt(i); 
     if (v instanceOf CompoundButton) { 
      if (v.isChecked) { 
       sb.append(v.getText()); 
      } 
     } 

} 
textView.setText(sb.toString()); 
} 
0

定義這三個方法:

private String getText(RadioButton button) { 
    if button.isChecked() return button.getText(); 
    else return ""; 
} 

private String getText(CheckBox box) { 
    if box.isChecked() return "checkBox" 
    else return ""; 
} 

private void refreshText() { 
    TextView t; 
    String text = getText(button1) + getText(button2) + getText(checkbox1) + getText(checkbox2); 
    t.setText(text); 
} 

然後,您的每個視圖都應該簡單地在點擊時調用refreshText()

相關問題