从ListView适配器存储信息而不使用SharedPreferences?

时间:2013-06-13 16:06:22

标签: android listview checkbox

我有一个扩展BaseAdapter的适配器;在内部定义了两个复选框。

public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;
    LayoutInflater inflater = context.getLayoutInflater();

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.list_layout, null);
        holder = new ViewHolder();
        holder.apkName = (TextView) convertView.findViewById(R.id.appname);
        holder.category1 = (CheckBox) convertView.findViewById(R.id.category1);
        holder.category1.setTag(position);
        holder.category2 = (CheckBox) convertView.findViewById(R.id.category2);
        holder.category2.setTag(position);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    PackageInfo packageInfo = (PackageInfo) getItem(position);
    Drawable appIcon = packageManager.getApplicationIcon(packageInfo.applicationInfo);
    String appName = packageManager.getApplicationLabel(packageInfo.applicationInfo).toString();
    appIcon.setBounds(0, 0, 55, 55);
    holder.apkName.setCompoundDrawables(appIcon, null, null, null);
    holder.apkName.setCompoundDrawablePadding(15);
    holder.apkName.setText(appName);
    holder.category1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            if(holder.category1.isChecked()){
                holder.2.setChecked(false);
                int getPosition = (Integer) holder.category1.getTag();

            }
        }
    });
    holder.category2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
        public void onCheckedChanged(CompoundButton compoundButton, boolean b){
            if(holder.category2.isChecked()){
                holder.category1.setChecked(false);
                int getPosition = (Integer) holder.educational.getTag();
            }
        }
    });

    return convertView;
}

基本上我拥有的是所有应用程序的列表,然后是两个复选框,您可以在其中选择一个或两个复选框。据我所知,getPosition变量将区分复选框对?我想要的是存储用户已检查过哪些复选框。我的想法是首先使用SharedPreferences并存储每个getPosition的布尔值,但SharedPreferences不起作用。这是因为我是在扩展BaseAdapter而不是活动吗?如何检索我的主要活动中是否选中了复选框?

2 个答案:

答案 0 :(得分:1)

getSharedPreferences(String, int)

需要有一个上下文。您始终可以在适配器中传递上下文:

class YourAdapter extends BaseAdapter{
private Context context;
public YourAdapter(Context context){
   this.context=context;
}
//What ever u need to do in this adapter
private doStuff(){
   context.getSharedPreferences(String, int);//ok
}
}

在Activity中创建此适配器时,只需传入以下活动:

YourAdapter mAdapter=new YourAdapter (this); //in your activity .

答案 1 :(得分:0)

也许我错过了它,但我看不到你在哪里尝试使用SharedPreferences(我今天确实有一个屁眼)但是你应该能够使用传入的Context只要你有一个有效的Activity Context使用

    SharedPreferences prefs = context.getSharedPreferences(...);

另一个选项,如果您不需要它是持久的并且只是在用户当前位于应用中时存储,则应使用class变量设置static来保存价值并从那里检索它们。但是,如果您希望它是持久的,那么SharedPreferences是最好的方法。