android - 如何在 ListView 中滚动时保存 CheckBox 的状态?

标签 android listview checkbox scroll state

我已经将 ListView 与自定义适配器一起使用,所以我的 ListView 包含 CheckBox,但问题是当我向下滚动时,选中的 CheckBoxes 取消选中,我如何使用这段代码来做到这一点?

更新

我的自定义适配器:

    public class AppsArrayAdapter extends ArrayAdapter<String> {
    private final Context context;

    private List<Integer> checkedItems;

    private final String DefaultApps = "def_apps";

    public AppsArrayAdapter(Context context, String[] values, List<Integer> checkedItems) {//XXX
        super(context, R.layout.apps, values);
        this.context = context;
        this.checkedItems = checkedItems;//XXX
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        SharedPreferences myPrefsApps =context.getSharedPreferences("myPrefsApps", Context.MODE_PRIVATE);
        String prefNameDefaultApps = myPrefsApps.getString(DefaultApps, "");
        String prefNameDefaultAppsVer = myPrefsApps.getString(DefaultAppsVer, "");


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

        View rowView = inflater.inflate(R.layout.apps, parent, false);
        TextView text_apps = (TextView)rowView.findViewById(R.id.text_apps);
        CheckBox check = (CheckBox)rowView.findViewById(R.id.check_apps);
        text_apps.setText(prefNameDefaultApps.split("\n")[position]);

        check.setChecked(checkedItems.contains((Integer) position));
        return rowView;
    }   
}

还有我的 Activity :

    public class AppsActivity extends ListActivity {
    private final String DefaultApps = "def_apps";

    private List<Integer> checkedItems = new ArrayList<Integer>();


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        AppsArrayAdapter adapter = new AppsArrayAdapter(this, prefNameDefaultApps.split("\n"), checkedItems);
        setListAdapter(adapter);
}
}
@Override
    public void onListItemClick(ListView l, View v, int position, long id) {
       if(checkedItems.contains((Integer) position)) checkedItems.remove((Integer) position);
       else checkedItems.add((Integer) position);
    }

最佳答案

// initialise the list
private List<Integer> selection = new ArrayList<Integer>();

for (String str: prefNameDefaultApps.split("\n")) {
        selection.add(0);
}


// setting the list 
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
        if(CheckBox is checked) {//(check if the checkbox is checked )
               selection.set(position, 1);
        }
        else{
               selection.set(position, 0);
        }
}

// show in the listView
@Override
public View getView(int position, View convertView, ViewGroup parent) {

        ....
        ....
        check.setChecked(selection.get(position) == 0 ? false : true);

}

这应该让你继续:)

关于android - 如何在 ListView 中滚动时保存 CheckBox 的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9383222/

相关文章:

Android服务stopself方法改变按钮状态

android - 如何在QT上将SQLite导出到apk?

android - 除了使用字符串之外的 ListAdapter 过滤器?

javascript - 嵌套复选框不适用于多个主要选项

android - Ionic3 构建错误 : Could not find play-services-auth-base. aar (15.0.1)

java - 首选项中的 ListView

java - 数组适配器 : Remove by Index

javascript - 使用 javascript 过滤表格

jquery - 页面刷新时如何运行jquery函数?

android - ObjectInputStream java.io.StreamCorruptedException : Wrong format: 0 lollipop and marshmalow