Код, чтобы добавить оба флажка и radiobutton в том же списке в Android? - PullRequest
0 голосов
/ 05 марта 2012

Мне нужно добавить флажок в Listview. Как добавить радио-кнопки и флажки в один и тот же список с помощью Android?

1 Ответ

1 голос
/ 08 марта 2012

preview

Вы должны создать свой собственный Адаптер списка, что-то вроде этого:

public class RadioCheckAdapter extends BaseAdapter{ 

    private final RadioCheck[] radiochecks; 
    RadioCheckAdapter(RadioCheck... radiochecks) {
        this.radiochecks = radiochecks;
    }
    ...
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewGroup item = getViewGroup(convertView, parent);

        RadioCheck radiocheck = radiochecks[position];

        CheckBox check = (CheckBox)item.findViewById(R.id.check);
        RadioButton radio = (RadioButton)item.findViewById(R.id.radio);

        if (radiocheck.type==0)
        {
            check.setVisibility(View.VISIBLE);
            radio.setVisibility(View.INVISIBLE);
            check.setText(radiocheck.name);
            radio.setText("");
        }
        else
        {
            check.setVisibility(View.INVISIBLE);
            radio.setVisibility(View.VISIBLE);
            check.setText("");
            radio.setText(radiocheck.name);
        }       

        return item;        
    }

    public ViewGroup getViewGroup(View reuse, ViewGroup parent) {
        if(reuse instanceof ViewGroup) return (ViewGroup)reuse;

        Context context = parent.getContext(); 
        LayoutInflater inflater = LayoutInflater.from(context); 
        ViewGroup item = (ViewGroup)inflater.inflate( 
                R.layout.radiocheck_item, null);

        return item;
    }   

}

И такой макет:

<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

    <CheckBox
        android:id="@+id/check"
        android:textSize="20dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />

    <RadioButton
        android:id="@+id/radio"
        android:textSize="20dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />      

</RelativeLayout>

А в твоей деятельности:

public class MainActivity extends ListActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        setListAdapter(new RadioCheckAdapter(
                    new RadioCheck("Check 1"), 
                    new RadioCheck("Radio 1", 1), 
                    new RadioCheck("Check 2"), 
                    new RadioCheck("Radio 2", 1), 
                    new RadioCheck("Check 3"), 
                    new RadioCheck("Radio 3"), 
                    new RadioCheck("Check 4", 1), 
                    new RadioCheck("Radio 4")));
    }

}

-

class RadioCheck {
    final String name;
    int type=0; // 0: check, 1: radio

    public RadioCheck(String name)
    {
        this.name= name;
        this.type= 0;
    }   

    public RadioCheck(String name, int type)
    {
        this.name= name;
        this.type= type;
    }
}
...