2017-07-04 8 views
0

ユーザーがsubmitをクリックしたときにチェックボックスを使ってデータを設定する方法は?私はすべてのデータを取得したいisChecked()CheckBoxでisCheckedを使ってArrayListを設定する方法android

そして私は動作しないこのコードを試してください。

myadapter

viewHoder.cx_select_invite.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (isChecked) { 
      Log.d("ChatGroupInviteAdap", "onClick position: " + position); 
      Log.d("ChatGroupInviteAdap", "onClick getFirstname: " + chatFriendsListModels.get(position).getFirstname()); 
      id = chatFriendsListModels.get(position).getId(); 
      ChatGroupInviteFragment.dataMember.add(id); 
     } 

     if (!isChecked) { 
      id = chatFriendsListModels.get(position).getId(); 
      ChatGroupInviteFragment.dataMember.remove(id); 
     } 

    } 
}); 

myFragment

ユーザーがクリックは、ユーザーのチェックは、ユーザーが

致命的な例外を未チェックの際

tx_submit.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Log.d(TAG, "OnClick: " + ChatGroupInviteFragment.dataMember.size()); 

     for (int i=0;i<ChatGroupInviteFragment.dataMember.size();i++){ 
      Log.d(TAG, "OnClick2 : " + ChatGroupInviteFragment.dataMember.get(i)); 
     } 
    } 
}); 

が、私はエラーを取得し終えたときに提出:メイン プロセス:xxx.xx.x、PID:20496 java.lang.IndexOutOfBoundsException:無効なインデックス36、サイズは3

36 is id unChecked 

and 3 = size isChecked 

はどのようにそれを設定するのですか?

+0

の可能性のある重複(https://stackoverflow.com/questions/8060514/android-listview-with-check-boxes) –

答えて

1
use like this, add one more parameter in your model class as boolean give name isChecked and then do like this 



    viewHoder.cx_select_invite.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       chatFriendsListModels.isChecked(isChecked); 

      } 
     }); 

    and then on your final submit button do like this 



tx_submit.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     for (int i=0;i<chatFriendsListModels.size();i++){ 
      if(chatFriendsListModels.isChecked()==true) 
      String id = chatFriendsListModels.get(i).getId(); 
      // you do what you want with id here 
     } 


    } 
}); 
+0

内からアクセスしました!それは仕事です! –

+0

wecome、ここに私のアンドロイドチュートリアル、Kotlin https://www.youtube.com/channel/UCC_cuZHf2M9HrHo5OxOU3zA –

0

この問題は、ループがforの2つの異なるListを使用しているようです。

for (int i=0;i<ChatGroupInviteFragment.getListFriend.size();i++){ 
        Log.d(TAG, "OnClick2 : " + ChatGroupInviteFragment.dataMember.get(i))    
} 

ここでは、サイズがであるように思わChatGroupInviteFragment.getListFriendリストを反復しています。一方、のデータはのようになりますので、ArrayOutOfBoundExceptionのデータを取得しています。

あなたがに変更する必要があります。

for (int i=0;i<ChatGroupInviteFragment.dataMember.size() - 1;i++) 
{ 
    Log.d(TAG, "OnClick2 : " + ChatGroupInviteFragment.dataMember.get(i))    
} 
+0

私は編集しましたが、依然としてエラー番号 –

+0

を確認してください。反復カウンタを変更しました –

+0

まだこのエラーは、ユーザーがサイズ= 3をチェックし、ユーザーが位置> 3をチェックしていない場合、エラー –

0

getViewメソッド():[?]チェックボックス付きのAndroidのListView]

viewHoder.cx_select_invite.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) { 


       int position= viewHolder.checkbox.getTag(); //Try to get position this way 

       id = chatFriendsListModels.get(position).getId(); 
       ChatGroupInviteFragment.dataMember.add(id); 
      } 
      if (!isChecked) { 
       id = chatFriendsListModels.get(position).getId(); 
       ChatGroupInviteFragment.dataMember.remove(id); 
      } 

     } 
    }); 

    viewHolder.checkbox.setTag(position); 
+0

'位置要素'?それはエラー –

+0

申し訳ありませんint位置、試してみてください – zhangle

+0

'int position = viewHolder.checkbox.getTag(); 'viewHolderは内部クラス –

関連する問題