2

getView で行われるカスタム リストビューがあります。各行の右側に 4 つのテキストビューとラジオボタンが必要です。ここでこれに関する多くの例を見ましたが、アイデアを得ることができませんでした。これが私の getView 関数です。この状況では、行を表示できますが、別のラジオボタンを選択すると、ラジオボタンがまだチェックされています。ラジオボタンを適切に機能させ、選択したボタンの ID を取得するには、関数に何を追加する必要がありますか? ありがとう

private static class CitizenAdapter extends BaseAdapter {
         private LayoutInflater mInflater;
         public CitizenAdapter(Context context) {
                   mInflater = LayoutInflater.from(context);
                    }
         public int getCount() {
                    return sicilArr.size();
                    }
         public Object getItem(int position) {
                        return position;
                    }
         public long getItemId(int position) {
                        return position;
                    }       
         public View getView(final int position, View convertView, ViewGroup parent) {
                final ViewHolder holder;
                    if (convertView == null) {
                        convertView = mInflater.inflate(R.layout.table_row_citizen, null);
                        holder = new ViewHolder();
                        holder.text1 = (TextView) convertView.findViewById(R.id.TextView01);
                        holder.text2 = (TextView) convertView.findViewById(R.id.TextView02);
                        holder.text3 = (TextView) convertView.findViewById(R.id.TextView03);
                        holder.text4 = (TextView) convertView.findViewById(R.id.TextView04);
                        holder.radioCitizen = (RadioGroup) convertView.findViewById(R.id.radioGroupCitizen);
                        holder.radioButCitizen  = (RadioButton) convertView.findViewById(R.id.radioButtonCitizen);

                        holder.radioCitizen.setOnCheckedChangeListener(new OnCheckedChangeListener() {                              
                            @Override
                            public void onCheckedChanged(RadioGroup group, int checkedId) {

                            }
                        });
                        convertView.setTag(holder);
                    } else {
                        holder = (ViewHolder) convertView.getTag();
                    }       
                   holder.text1.setText(array1.get(position));
                   holder.text2.setText(array2.get(position));
                   holder.text3.setText(array3.get(position));  
                   holder.text4.setText(array4.get(position));


            return convertView;
           }        
             static class ViewHolder {      
                  TextView text1;
                  TextView text2;
                  TextView text3;
                  TextView text4;

                  RadioGroup radioCitizen;
                  RadioButton radioButCitizen;
                }       
            }       

また、これは私のxml行ファイルです:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:gravity="left|center"
android:layout_width="wrap_content"
android:paddingBottom="10px"
android:paddingTop="10px"
android:paddingLeft="3px">    
 <TextView
    android:id="@+id/TextView01"
    android:layout_width="50dp"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textSize="15dip"
    android:textStyle="bold"
    android:textColor="#d08021">
 </TextView>
<TextView
    android:id="@+id/TextView02"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textSize="15dip"
    android:textStyle="bold"
    android:textColor="#81A2BC">
 </TextView>
 <TextView
    android:id="@+id/TextView03"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textSize="15dip"
    android:textStyle="bold"
    android:textColor="#81A2BC">
 </TextView>    
 <TextView
    android:id="@+id/TextView04"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textSize="15dip"
    android:textStyle="bold"
    android:textColor="#81A2BC">
 </TextView> 
 <RadioGroup 
    android:id="@+id/radioGroupCitizen"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <RadioButton
                        android:id="@+id/radioButtonCitizen"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />
 </RadioGroup>

4

2 に答える 2

7

1つの方法は、他のすべてのラジオボタンを手動でオフにすることです。現在選択されているアイテムの位置を保持する変数を作成できます。また、getView現在の位置が選択した位置と等しいかどうかに応じて、現在のラジオボタンをオン/オフにします。ラジオボタンを押すと、選択したアイテムの位置を変更して、を呼び出しますnotifyDatasetChanged
この質問も確認してください:singleChoiceモードのRadioButtonとカスタム行レイアウトを備えたAndroid ListView

1)に追加private int selected = -1CitizenAdapterます。
2)各ラジオボタンにクリックリスナーを追加します。

holder.radioCitizen.setOnClickLisener(new View.OnClickListener() 
    {                              
        @Override
        public void onCheckedChanged(View view) {
            selected = (Integer) view.getTag();
            notifyDataSetChanged();
        }
    });

3)各ラジオボタンのタグを現在の位置に設定し、チェック状態を設定します。

// After you set text to 4 textviews
holder.radioButCitizen.setTag(position);
holder.radioButCitizen.setChecked(position == selected);
于 2013-01-30T16:15:19.083 に答える
0
    int selected = 0;

@Override
public View getView(final int position, View convertView, ViewGroup parent) 
{
    // TODO Auto-generated method stub

    ViewHolder holder;
    final RadioButton motif;

    if (null == convertView) 
    {
        convertView = View
                .inflate(parent.getContext(), R.layout.motif_item, null);
        holder = new ViewHolder(convertView);
        convertView.setTag(holder);
    }

    holder = (ViewHolder) convertView.getTag();
    motif = (RadioButton) holder.getmotif();

    motif.setTag(position);

    motif.setText(motifList.get(position));

    if(position == 0)
    {
        motif.setChecked(true);
    }
    else
        motif.setChecked(false);

    motif.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            selected = position;
            notifyDataSetChanged();
        }
    });

    if(position == selected)
        motif.setChecked(true);
    else
        motif.setChecked(false);

    return convertView;
}

private class ViewHolder {

    private View mRow;
    private RadioButton motif = null;

    public ViewHolder(View row) {
        mRow = row;
    }

    public RadioButton getmotif() {
        if (motif == null) {
            motif = (RadioButton) mRow.findViewById(R.id.itemMotif);
        }
        return motif;
    }
}
于 2013-10-15T14:41:15.343 に答える