2011-02-24 2 views
3

내 응용 프로그램에서 동적 체크 박스를 만들려고 할 때 문제가 있습니다. 디자인이 잘 작동하고 원하는만큼 많은 체크 박스를 만들 수 있습니다. 체크 상자는 TextView와 함께 TableRow에 배치되어 텍스트가 확인란의 왼쪽에 오게합니다. 하지만 내 문제는, 그 여부에 상관없이 체크 박스의 "상태"를 얻을 수있는 나의 활동입니다. Infheck를 사용하여 내 Checkbox를 만듭니다. 체크 박스에 대한 XML은 :동적으로 생성 된 체크 박스에 대한 setOnClickListeners

<TableRow xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/TableRow" android:layout_width="wrap_content" android:layout_height="wrap_content"> 
<TextView android:paddingLeft="20dip" android:id="@+id/tv_effect" android:gravity="left" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:textColor="#000" android:textSize="18dip" android:layout_width="wrap_content"></TextView> 
<CheckBox android:id="@+id/cb_effect" android:layout_height="wrap_content" android:text="" android:layout_gravity="right" android:layout_width="wrap_content"></CheckBox> 

기능 나는 텍스트 뷰와 체크 박스를 포함하는 새로운 tablerow을 만들 전화 :

public void layoutMakeSpeakerEffect(String effectName,int effectNumber) 
{ 
    LayoutInflater linflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View myViewSp = linflater.inflate(R.layout.speaker_settings, null); 

    final TextView tv_effect = (TextView) myViewSp.findViewById(R.id.tv_effect); 
    tv_effect.setId(effectNumber); 
    tv_effect.setText(effectName); 

    final CheckBox cb_effect = (CheckBox) myViewSp.findViewById(R.id.cb_effect); 
    cb_effect.setId(effectNumber); 
    cb_effect.setText(""); 

    cb_effect.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(cb_effect.isChecked()) 
       { 
        Toast toast = Toast.makeText(getApplicationContext(), ""+tv_effect.getText()+": ON", Toast.LENGTH_SHORT); 
        toast.show(); 
       } 
       else 
       { 
        Toast toast = Toast.makeText(getApplicationContext(), ""+tv_effect.getText()+": OFF", Toast.LENGTH_SHORT); 
        toast.show(); 
       } 
      } 
    }); 

    tl_speakerSettings.addView(myViewSp); 
} 

그리고 언급 한 바와 같이, 설계가 잘 작동

. 그러나이 기능 외부에서 어떻게 체크 박스의 "상태"를 알 수 있습니까? 그리고 체크 박스 상태를 지울 수있는 함수와 체크 박스를 활성화하거나 비활성화 할 수있는 또 다른 함수가 필요합니까?

혼자서이 문제를 파악할 수 없습니다.

유일한 생각은 "cb_effects"ID를 확인한 후 원하는 체크 박스의 상태를 확인하는 것입니다.

답변

4

대신 setOnCheckedChangeListener을 사용하십시오. onCheckedChanged(CompoundButton buttonView, boolean isChecked) 메서드를 실행하면 isChecked 변수를 읽는 확인란의 상태가됩니다.

+0

@Cristian에게 감사드립니다. 그러나 나는 아직도 약간 혼란 스럽다. 어떻게하면 내 문제를 해결할 수 있을까? 필요한 것은 생성 된 체크 박스의 상태를 저장하는 메소드입니다. 토글 버튼을 클릭하면 체크 상자의 상태를 지우고 다시 토글 버튼을 눌렀을 때 "이전"상태를 다시 표시해야합니다. 대신에 setOnCheckedChangeListener를 구현함으로써 실제로 어떻게 어떤 체크 상자가 눌려 졌는지 볼 수 있습니까? – CoOkie

+0

'buttonView' 체크 상자에 대한 참조를 제공하기 때문에. 그것은 당신이 체크 박스에 원하는 것을하기 위해 사용할 수있는 객체입니다 :'Checkbox bla = (Checkbox) buttonView;'. – Cristian

+0

고마워, 그 방법을 시도해 볼게 .. : D – CoOkie

1

테이블에 행이있는 수만큼의 요소를 포함하는 전역 정수 배열을 사용할 수 있습니다. 체크 박스가 선택되면 요소의 값을 1로 설정하고 선택하지 않으면 0으로 설정하십시오. 어느 요소에 1이 있는지 찾아 냄으로써 체크 박스 중 어느 것이 체크되어 있는지 확인할 수 있습니다. 희망이 당신을 위해 작동합니다.

관련 문제