Android 配置更改后在ListView中保留单选按钮签入

Android 配置更改后在ListView中保留单选按钮签入,android,listview,Android,Listview,在我的片段中,我有4个ListView,所有4个都包含自定义行,其中有一个单选按钮,用户需要为每个ListView选择一行。起初,每当用户选择某一行时,我都很难让单选按钮被选中,但是我遇到了这个解决方案,它对我来说非常有效 现在一切都很好,除了配置更改后我无法保留选中的单选按钮,例如,手机从纵向更改为横向,反之亦然。我曾尝试使用setRetainInstancetrue来保留配置更改前的选择。我只是使用整数数组来跟踪不同列表视图中的用户选择,但是在配置更改后,我没有成功地使用此信息重新检查相应的

在我的片段中,我有4个ListView,所有4个都包含自定义行,其中有一个单选按钮,用户需要为每个ListView选择一行。起初,每当用户选择某一行时,我都很难让单选按钮被选中,但是我遇到了这个解决方案,它对我来说非常有效

现在一切都很好,除了配置更改后我无法保留选中的单选按钮,例如,手机从纵向更改为横向,反之亦然。我曾尝试使用setRetainInstancetrue来保留配置更改前的选择。我只是使用整数数组来跟踪不同列表视图中的用户选择,但是在配置更改后,我没有成功地使用此信息重新检查相应的单选按钮

下面是我的片段代码,包含ListView减去不相关的行:

public class FourBandFrag extends Fragment implements
    AdapterView.OnItemClickListener {

private ArrayList<ListView> lists = new ArrayList<ListView>();
private ArrayList<CustomAdapter> adapters = new ArrayList<CustomAdapter>();

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setRetainInstance(true);
    View result = inflater.inflate(R.layout.fourbandlayoutfrag, container,
            false);

    return result;
}

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    lists.add((ListView) getActivity().findViewById(R.id.FourListView1));
    lists.add((ListView) getActivity().findViewById(R.id.FourListView2));
    lists.add((ListView) getActivity().findViewById(R.id.FourListView3));
    lists.add((ListView) getActivity().findViewById(R.id.FourListView4));

    adapters.add(new CustomAdapter(getActivity(), generateData(1)));
    adapters.add(new CustomAdapter(getActivity(), generateData(1)));
    adapters.add(new CustomAdapter(getActivity(), generateData(2)));
    adapters.add(new CustomAdapter(getActivity(), generateData(3)));

    for (int i = 0; i < lists.size(); i++) {
        lists.get(i).setAdapter(adapters.get(i));
    }

    for (int q = 0; q < lists.size(); q++) {
        lists.get(q).setOnItemClickListener(this);
    }

    for (int i = 0; i < lists.size(); i++) {
        lists.get(i).setAdapter(adapters.get(i));
    }
}


@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
      //This checks the corresponding radio button for the corresponding listview
    ((CustomAdapter) parent.getAdapter()).setSelectedIndex(position);
    ((CustomAdapter) parent.getAdapter()).notifyDataSetChanged();

}
}
public class CustomAdapter extends ArrayAdapter<Model> {

private final Context context;
private final ArrayList<Model> modelsArrayList;
private int selectedIndex = -1;

public CustomAdapter(Context context, ArrayList<Model> modelsArrayList) {
    super(context, R.layout.listitem, modelsArrayList);

    this.context = context;
    this.modelsArrayList = modelsArrayList;
}

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


    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);


    View rowView = inflater.inflate(R.layout.listitem, parent, false);

        RadioButton radiobutton = (RadioButton) rowView
                .findViewById(R.id.radioButton);

        // Check the correct radio button when person selects a listview item
        if (selectedIndex == position) {
            radiobutton.setChecked(true);
        } else {
            radiobutton.setChecked(false);
        }

    return rowView;
}

public void setSelectedIndex(int index) {
    selectedIndex = index;
}

}

有任何修复建议吗?

这将根据您的情况使用

    View rowView = null;
    if (convertView == null) {
        View rowView = inflater.inflate(R.layout.listitem, parent, false);;
    } else {

        rowView = convertView;
    }

谢谢你的建议。我试着加入这个,但它仍然有相同的问题。配置更改后,单选按钮保持未选中状态。
07-02 12:56:14.407: D/FourBandFrag(30090): Rechecking radio button 0 from ListView 0
07-02 12:56:14.417: D/FourBandFrag(30090): Rechecking radio button 1 from ListView 1
07-02 12:56:14.427: D/FourBandFrag(30090): Rechecking radio button 2 from ListView 2
07-02 12:56:14.427: D/FourBandFrag(30090): Rechecking radio button 3 from ListView 3
    View rowView = null;
    if (convertView == null) {
        View rowView = inflater.inflate(R.layout.listitem, parent, false);;
    } else {

        rowView = convertView;
    }