2011-09-14 2 views
1

주 질문이 여러 번 편집되어 혼동을 야기하므로 다른 스레드가 삭제되도록 플래그를 지정했습니다.setOnCheckedChangeListener (ListView Checkbox가 작동하는 방법)를 얻는 방법

그래서 문제는 다음과 같습니다. ListView에 체크 박스를 채우고 싶은데 listView를 사용자 정의하고 싶습니다. simple_multiple_choice_mode를 사용하지 않고 list_item.xml에 레이아웃을 적용하고 있습니다 (각 행에 대해)

:
 <CheckBox> 
       xmlns:android="http://schemas.android.com/apk/res/android" android:paddingLeft="8mm" 
       android:layout_width="fill_parent" 
        android:layout_height="wrap_removed" android:id="@+id/nomeAPP" style="?listItem"&gt; 
        </<CheckBox> 

내 ListView에는 lista.xml

<ListView android:id="@android:id/list" 
    android:layout_width="fill_parent" android:layout_height="wrap_content" 
    style="?whiteBackground"> 

내 어댑터에

 list=getListView(); 
       this.setListAdapter(new ArrayAdapter&lt;String&gt;(this, 
         R.layout.list_item, aux)) 

그래서 체크 된 항목에 대해 setOnCheckedChangeListener를 만들려고 했으므로 배열 된 항목을 저장할 수 있습니다.

 CheckBox cb = (CheckBox) findViewById(R.id.CheckBox01); 
       cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

        public void onCheckedChanged(CompoundButton buttonView, 
          boolean isChecked) { 
         // TODO Auto-generated method stub 
         if (buttonView.isChecked()) { 
          Toast.makeText(getBaseContext(), &quot;Checked&quot;, 
            Toast.LENGTH_SHORT).show(); 
          } 
         else 
         { 
          Toast.makeText(getBaseContext(), &quot;UnChecked&quot;, 
            Toast.LENGTH_SHORT).show(); 
         } 

        } 
        }); 

문제는 다음과 같습니다 :

그래서 나는이 청취자를했던 내가 NULL 예외를 얻을. 호기심 것입니다 : 나는

간단한
<ScrollView android:id="@+id/widget54" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"  xmlns:android="http://schemas.android.com/apk/res/android"> 

    <LinearLayout android:orientation="vertical" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <CheckBox android:text="Checkbox" android:id="@+id/CheckBox01" 
     android:layout_width="wrap_content" android:layout_height="wrap_content"></CheckBox> 
    </LinearLayout> 

</ScrollView> 

내 레이아웃을 "전환"그리고 내 ListView에 (내 어댑터)를 잊어 버린 경우, 그것을 작동합니다! 그래서 레이아웃에 어떤 문제가 있습니까?

여러분이 정확히 상황을 볼 수 있도록 새 프로젝트를 만들었습니다. 사용 가능합니다 HERE 지금은 작동하지 않지만 어댑터의 주석을 제거한 경우 ListActivity를 Activity로 변경하고 setContentView를 변경하면 작동합니다 (텍스트의 선택/선택 취소).

내가 찾은 또 다른 흥미로운 점은이 관련이있는 경우 ListActivity와 함께,

+1

null 예외 로그를 ​​게시 할 수 있습니까? –

답변

1

가 좋아, 내가 문제를 찾은 것 같아 ... 궁금 .... 결코

CheckBox cb = (CheckBox) findViewById(R.id.CheckBox01); 

이 작품을 작동하지 않는다는 것입니다 두 번째 레이아웃에서는 setcontentview()를 사용하여 활동에 대한보기를 이미 설정했을 수 있기 때문입니다.

그래서, 목록 활동의 문제는 위에서 언급 한 라인이

R.id.CheckBox01 

당신이 레이아웃에 대한 액세스 권한을 얻을 수 있고,이 ID를 찾을 수보고있다 레이아웃하는 모르고 있다는 것입니다 당신이 목록보기를 팽창시키는보기는 그것을 inflatedView이라고 부르며 이것을 다음과 같은 체크 박스에 접근 할 수 있습니다.

CheckBox cb = (CheckBox) inflatedView.findViewById(R.id.CheckBox01); 

콘텐츠보기를 설정하지 않으면 findViewById() 함수에보기를 찾아야 만합니다. NPE 로그를 게시하면이 사실을 확인할 수 있습니다.

HTH.

+0

불행히도 여러분의 생각에는 뭔가 빠져 있습니다. - setContentView (R.Layout.Lista)는 "첫 번째 상황"을 나타 내기 때문에 App은 ListView가 어디 있는지 알고 어댑터는 R.layout.List_item이있는 각 행의 위치를 ​​알고 있습니다. 그렇다고해도 솔루션을 사용하려고했지만, 적응 방법을 모르겠다. 그 라인 앞에 무엇을해야합니까? inflatedView는 뷰의 변수입니다. @yashwanthkumar 당신은 외모를 갖고 싶다면 모든 코드를 사용할 수 있습니다. – Tiago

+0

2 개의 링크를 따라 가면 올바른 방법으로 체크 박스에 액세스하는 데 도움이 될 것이라고 생각합니다. 체크 박스에 액세스해야한다는 아이디어가 있습니다. getView() 메소드, http://android-er.blogspot.com/2010/06/custom-arrayadapter-with-with-different.html, http://www.ezzylearning.com/tutorial.aspx?tid= 1763429 & q = custom-android-listview-items-with-custom-arrayadapter –

+0

감사합니다. 이제 어댑터를 사용자 정의하는 데 몇 가지 문제가 있습니다.하지만 그 방법이 확실합니다. – Tiago

관련 문제