我有一个扩展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而不是活动吗?如何检索我的主要活动中是否选中了复选框?
答案 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
是最好的方法。