2015-06-12 15 views
0

У меня есть текстовое представление, 2 флажка, 2 RadioButtons. Какой элемент, который я выбираю или отменяю, должен обновляться в текстовом виде - как мне это достичь? Я знаю, что мы можем сделать это, используя if else, но что, если проблема становится сложной? Например, что делать, если у меня есть 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

Я хотел бы использовать, если-то еще случай, у вас есть сейчас, но использовать 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()); 

этот путь вам нужно всего один случай за чекбокс/радиокнигу

+0

Обет !!! Уменьшилось все мои усилия! спасибо – Govarthanan

+0

Не проблема! рад, что это помогло! –

1

Дайте этот снимок .. он должен обладать теми же функциями, что и ваш код (за исключением того, что значение радио всегда будет в начале дисплеяText строка) с гораздо меньшим количеством кода.

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

Нет, это не работает, я на самом деле сделал то, что вы сказали, но это не дает правильного ответа. Если я сниму флажок1, он не удалит значение из textview, потому что нет никакого другого утверждения, если мы начнем внедрять таким образом, мы получим ту же логику, что и моя. Спасибо за ваше время – Govarthanan

+0

Вы включили строку 'displayText =' "'в начале метода onClick? Он должен очистить 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() при щелчке.

 Смежные вопросы

  • Нет связанных вопросов^_^