2012-01-10 7 views
0

내 페이지에 listView와 OK 버튼이 있습니다. 각 listItem에는 id와 RadioButtonGroup이 있습니다. SimpleCursorAdapter를 사용하여 목록을로드하고 있습니다.Android ListItem with radio button

내가 뭘하고 싶은지 확인을 클릭하면 해당 radioButtonGroup에서 개별 id 및 라디오 단추 선택을 얻고 싶습니다.

어떻게해야합니까?

답변

0

SimpleCursorAdapter 클래스를 확장하고 newView/bindView 메서드 내부에서 radioButtonGroup의 상태를 확인해야합니다. 이를 수행하려면 OnCheckedChangedListener을 사용하여 라디오 버튼 그룹에 대한 리스너를 설정해야합니다. 필자는 개인용 응용 프로그램에서 사용한 몇 가지 소스 코드 예제를 가지고 있습니다. 내가 체크 박스를 듣고 있지만 라디오 버튼 그룹에 적응하려면 완벽하게 솔직해야한다는 것을 명심하십시오.

@Override 
public void bindView(View view, Context context, Cursor cursor) { 

    NoteHolder holder = (NoteHolder) view.getTag(); 

    holder.titleView.setText(cursor.getString(titleColIndex)); 
    holder.modifiedView.setText(mUtils.formatDate(mUtils.formatDateFromString (cursor.getString(modifiedColIndex), context, "dd-MM-yyyy"), "dd-MM-yyyy")); 
    holder.priorityView.setImageResource(mUtils.getPriorityResourceId(cursor.getInt(priorityColIndex))); 

    Typeface tf = Typeface.createFromAsset(context.getAssets(), "fonts/ARLRDBD.TTF"); 
    holder.titleView.setTypeface(tf); 
    holder.modifiedView.setTypeface(tf); 

    final int pos = cursor.getPosition(); 
    final long id = cursor.getLong(idColIndex); 

    holder.checkbox.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      checkChecked(v, pos, id); 
     } 
    }); 

    view.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      rowCheckChecked(v, pos, id); 
     } 
    }); 

    holder.checkbox.setChecked(itemChecked.get(pos)); 
} 

private static class NoteHolder { 
    TextView titleView; 
    TextView modifiedView; 
    ImageView priorityView; 
    CheckBox checkbox; 
} 

private void checkChecked(View v, int pos, long id){ 

    CheckBox cb = (CheckBox) v.findViewById(R.id.delete_checkbox); 
    if (cb.isChecked()) 
    { 
     itemChecked.set(pos, true); 
     mSelectedIDs.add(id); 
    } 
    else if(!cb.isChecked()) 
    { 
     itemChecked.set(pos, false); 
     if(mSelectedIDs.contains(id)) 
      mSelectedIDs.remove(id); 
    } 
} 

viewHolder 패턴도 사용하는 것이 좋습니다. 특히 앱에 많은 목록 항목이있는 경우. here에 대한 자세한 내용을 읽고 here 예를 참조하십시오. 위 코드에 구현 된 것을 볼 수 있습니다.

희망이 있습니다.

+0

감사를 회신합니다. ViewHolder에 대해 읽고 솔루션 u를 제공하려고합니다. 이제 버튼 클릭시 getView를 어떻게 호출해야합니까? – user1128578

+0

당신은 getView를 호출하지 않습니다.이 예제에서는 getView를 사용하지 않고, newView, bindView를 사용합니다. 기본적으로 getView이지만, newView 또는 재활용 된 뷰로 이미 분리되어 있습니다. bindView는 항상 호출되며 newView는 새로운 뷰가 호출 될 때만 호출됩니다. http://android.amberfog.com/?p=296도 도움이 될이 링크를 확인하십시오. – greven

0

당신은 당신의 목록에에 ClickListener를 추가 할 수 있습니다

list.setOnItemClickListener(new OnItemClickListener() { 
@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    RadioButton button = (RadioButton) view.findViewById(R.id.RadioButton); 
    button.getId(); 
} 
});