listview自定义适配器项目在更改屏幕方向时取消选择

时间:2017-08-10 08:04:40

标签: android listview screen-orientation custom-adapter

我正在使用listview和自定义适配器,但问题是当我选择项目时,无线电组中的单选按钮会在更改屏幕方向时被取消选择。即使我们更改屏幕的方向,我也希望选择所选项目。这是我的代码,

public class MainActivity extends AppCompatActivity implements AdapterCallback {
    ListView listView;
    DataClass data;
    ArrayList<DataClass> arrayList;
    Button button;
    Adapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView) findViewById(R.id.list);
        button = (Button) findViewById(R.id.button);

        arrayList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            data = new DataClass(i, "std " + i);
            arrayList.add(data);

        }


        adapter = new Adapter(this, arrayList, MainActivity.this);
        listView.setAdapter(adapter);

    }


    @Override
    public void onMethodCallback(int pos, String name, String atten) {

    }
}  

Adapter.java

public class Adapter extends BaseAdapter {

    Context context;
    ArrayList<DataClass> arrayList;
    private AdapterCallback mAdapterCallback;


    public Adapter(Context context, ArrayList<DataClass> arrayList, AdapterCallback callback) {
        this.context = context;
        this.arrayList = arrayList;
        this.mAdapterCallback = callback;
    }

    @Override
    public int getCount() {
        return arrayList.size();
    }

    @Override
    public Object getItem(int position) {
        return arrayList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final DataClass rowItem = (DataClass) getItem(position);

        if (convertView == null) {
            LayoutInflater layoutInflater = (LayoutInflater) this.context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = layoutInflater.inflate(R.layout.list_item, null);
        }

        TextView tv_name = (TextView) convertView.findViewById(R.id.tv_name);
        tv_name.setText(rowItem.getName());

        final RadioGroup radioGroup = (RadioGroup) convertView.findViewById(R.id.rdbt_group);
        radioGroup.setOnCheckedChangeListener(null);

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

                RadioButton checkedRadioButton = (RadioButton) group.findViewById(checkedId);

                if (null != checkedRadioButton && checkedId > -1) {

                }
            }
        });


        return convertView;
    }


}

list_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="0dp"
        android:layout_gravity="center"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <RadioGroup
        android:id="@+id/rdbt_group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_marginRight="20dp"
        android:orientation="horizontal"
        android:padding="5dp">

        <RadioButton
            android:id="@+id/radio_no"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="A"
            android:textSize="15sp" />

        <RadioButton
            android:id="@+id/radio_clr"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="B"
            android:textSize="15sp" />

        <RadioButton
            android:id="@+id/radio_yes"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="C"
            android:textSize="15sp" />


    </RadioGroup>

</LinearLayout>

1 个答案:

答案 0 :(得分:0)

每次屏幕旋转片段并重新创建活动。你必须拯救国家。 See this