我有一个充满文本的列表视图,但每行也有一个复选框。调用onCreate()
后,我希望它从sharedpreferences
加载复选框值并将其应用于复选框。另外,当调用onPaused()
时,我希望它保存复选框值。
任何人都知道如何做到这一点???
P.S。我已经阅读了一些内容,我找到了自定义adapters
,但我不太了解它们。如果有人能解释我的话,也会受到赞赏。
答案 0 :(得分:2)
在扩展自定义Adapter
时,您正在精确实现您所描述的内容。在你的情况下,似乎ArrayAdapter
足以实现它。
此适配器具有getView()
方法,该方法将为每个行调用,并且基本上处理这些行,您实现它们的显示方式。此方法有3个参数,第一个是正在渲染的行的position
。第二个是View
,模糊地说,代表整行的布局。第三个代表View
的父代。这样,假设您的第二个参数名为convertView
,您可以执行以下操作:
CheckBox cb = convertView.findViewById(R.id.myCheckbox);
并使用适当的值设置调用cb.isChecked(...)
,以显示该复选框的当前行值。
一些有用的链接:
答案 1 :(得分:0)
我不熟悉带有复选框的android预先实现的列表视图。如果有,那么应该有一种方法根据位置检查它们。但我建议您使用自定义ArrayAdapter并定义您的复选框。在getView()中,您只需检查位置并根据位置设置复选框。
编辑:实际上,这是一个整个过程示例的编辑。
MyAdapter类:
package com.example.stackover;
import java.util.ArrayList;
import android.app.ListActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
public class MyAdapter extends BaseAdapter {
ArrayList<Integer> checkBoxList;
ListActivity mListActivity;
public MyAdapter(ListActivity mListActivity, ArrayList<Integer> checkBoxList) {
this.mListActivity = mListActivity;
this.checkBoxList = checkBoxList;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return checkBoxList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return checkBoxList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row=convertView;
RowWrapper wrapper = null;
if (row==null) {
LayoutInflater inflater = mListActivity.getLayoutInflater();
row=inflater.inflate(R.layout.listrow, parent, false);
wrapper=new RowWrapper(row);
row.setTag(wrapper);
}
if(checkBoxList.contains(position)) {
wrapper.getCb().setSelected(true);
}
return(row);
}
}
RowWrapper类:
package com.example.stackover;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
public class RowWrapper {
View base;
TextView description = null;
CheckBox cb = null;
public RowWrapper(View base) {
this.base=base;
}
public TextView getDescription() {
if (description==null) {
description=(TextView)base.findViewById(R.id.description);
}
return(description);
}
public TextView getCb() {
if (cb==null) {
cb=(CheckBox)base.findViewById(R.id.cb);
}
return(cb);
}
public View getBase(){
return this.base;
}
}
你的listrow.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<CheckBox
android:id="@+id/cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
在ListActivity或ListFragment中,您可以创建MyAdapter,并使用构建函数设置适配器,以获取您的活动和共享首选项中的复选框列表。如果要更改描述textview,可以使用另一个保存文本的数组,并根据您的位置在getView()中设置它们。