2016-08-17 67 views
0

所以我有一个无线电组2个单选按钮,当用户选择第一个将显示在无线电组下的文本,如果用户选择第二个,它将在同一区域显示不同的消息。用Toast做这件事很容易,但我不想用Toast信息做。单击单选按钮时如何显示文本?

public void onActivityCreated (Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 


    Button rb1 = (Button) getActivity().findViewById(R.id.radioButton1); 
    Button rb2 = (Button) getActivity().findViewById(R.id.radioButton2); 

    rb1.setOnClickListener(next_Listener); 
    rb2.setOnClickListener(next_Listener); 

} 

private OnClickListener next_Listener = new OnClickListener() { 

    public void onClick(View v) { 

     RadioGroup radio_grp=(RadioGroup)getActivity().findViewById(R.id.radio_grp); 
     RadioButton rb1=(RadioButton)getActivity().findViewById(R.id.radioButton1); 
     RadioButton rb2=(RadioButton)getActivity().findViewById(R.id.radioButton1); 
     if(rb1.isChecked() == true) { 

      // display text if they click 1st button 

     } 

     if (rb2.isChecked()) == true { 

      // display text if they click 2nd button 

     } 
    } 
} 

回答

1

由于单选扩展Button类,可以实现一个ClickListener

您还可以实现一个onCheckedChangedListener(),但这需要默认情况下未设置任何值。

这是由于onCheckedChangedListener()只在按钮之间切换时触发的事实,而且如果已经选择了某个按钮,则不会触发该按钮。

考虑你有你的TextView定义。你可以这样做有以下:

public void onActivityCreated (Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    TextView yourTextView = (TextView) findViewById(R.id.your_text_view); 

    RadioGroup radio_grp= (RadioGroup) getView().findViewById(R.id.radio_grp); 
    RadioButton rb1 = (RadioButton) getView().findViewById(R.id.radioButton1); 
    RadioButton rb2 = (RadioButton) getView().findViewById(R.id.radioButton1); 

    View.OnClickListener button1Listener = new View.OnClickListener() { 
     public void onClick(View v) { 
      yourTextView.setText("you have touched button1"); 
     } 
    }; 

    View.OnClickListener button2Listener = new View.OnClickListener() { 
     public void onClick(View v) { 
      yourTextView.setText("you have touched button2"); 
     } 
    }; 
    rb1.setOnClickListener(button1Listener); 
    rb2.setOnClickListener(button2Listener); 
} 

@EDIT

如果RadioGroup中和相应的单选按钮是片段的布局里面,你应该使用getView().findViewById()代替getActivity().findViewById()

更改代码中找到了自己的看法对此:

RadioGroup radio_grp= (RadioGroup) getView().findViewById(R.id.radio_grp); 
RadioButton rb1 = (RadioButton) getView().findViewById(R.id.radioButton1); 
RadioButton rb2 = (RadioButton) getView().findViewById(R.id.radioButton2); 
+0

我一直在'rb1.setOnClickListener(button1Listener)获取java.lang.NullPointerException异常; rb2.setOnClickListener(button2Listener);' –

+0

你能告诉我错误/ Stacktrace? 如果你在这里得到一个NullPointerException rb1.setOnClickListener(button1Listener); ,这意味着rb1最有可能为null,这意味着您的RadioButton rb1 =(RadioButton)getActivity(),您的 ; findViewById(R.id.radioButton1);正在返回nul ..是radioButton1布局中的按钮的ID? –

+0

有一个小的细节我忘了纠正你的代码。检查编辑。 RadioGroup和片段布局中的相应RadioButtons? –

0

试试这个

radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      if(checkedId == R.id.radioButton) 
      { 
       textField.setText("first text"); 

      } 
      else 
      if (checkedId == R.id.radioButton2) { 

        textField.setText("second text"); 
      } 
     } 
    }); 
1

您需要定义OnCheckedChangeListener单选按钮。使用这样的

rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if(isChecked()) 
        textview.setText("Radio Button 1 is checked"); 
      } 
     }); 



rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        if(isChecked()) 
         textview.setText("Radio Button 2 is checked"); 
       } 
      }); 
相关问题