Java 当后退按钮后,当应用程序关闭/重新启动时,保持开关按钮处于选中状态
我在一个列表视图中有一段已安装的应用程序,旁边有一个切换按钮 我想做的是,当用户点击按钮并打开时,我希望它在用户返回、退出应用程序或重新启动活动时保持打开状态 我做过研究,我知道这是可以实现的,但我不知道如何实现这一点 我试着这样做,但没有成功 以下是我的适配器类:Java 当后退按钮后,当应用程序关闭/重新启动时,保持开关按钮处于选中状态,java,android,button,android-fragments,android-listview,Java,Android,Button,Android Fragments,Android Listview,我在一个列表视图中有一段已安装的应用程序,旁边有一个切换按钮 我想做的是,当用户点击按钮并打开时,我希望它在用户返回、退出应用程序或重新启动活动时保持打开状态 我做过研究,我知道这是可以实现的,但我不知道如何实现这一点 我试着这样做,但没有成功 以下是我的适配器类: package com.ibc.android.demo.appslist.app; import android.app.Activity; import android.content.pm.PackageInfo; im
package com.ibc.android.demo.appslist.app;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Switch;
import android.widget.TextView;
import com.spicycurryman.getdisciplined10.app.R;
import java.util.List;
public class ApkAdapter extends BaseAdapter {
List<PackageInfo> packageList;
Activity context;
PackageManager packageManager;
boolean[] itemChecked;
SharedPreferences sharedPrefs;
public ApkAdapter(Activity context, List<PackageInfo> packageList,
PackageManager packageManager) {
super();
this.context = context;
this.packageList = packageList;
this.packageManager = packageManager;
itemChecked = new boolean[packageList.size()];
}
private class ViewHolder {
TextView apkName;
Switch ck1;
}
public int getCount() {
return packageList.size();
}
public Object getItem(int position) {
return packageList.get(position);
}
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
LayoutInflater inflater = context.getLayoutInflater();
if (convertView == null) {
convertView = inflater.inflate(R.layout.installed_apps, null);
holder = new ViewHolder();
holder.apkName = (TextView) convertView
.findViewById(R.id.appname);
holder.ck1= (Switch)convertView
.findViewById(R.id.checkBox1);
convertView.setTag(holder);
//holder.ck1.setTag(packageList.get(position));
} else {
holder = (ViewHolder) convertView.getTag();
}
// ViewHolder 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, 80, 80);
holder.apkName.setCompoundDrawables(appIcon, null, null, null);
holder.apkName.setCompoundDrawablePadding(15);
holder.apkName.setText(appName);
holder.ck1.setChecked(false);
//What would I put here!?!?
if (itemChecked[position])
holder.ck1.setChecked(true);
else
holder.ck1.setChecked(false);
holder.ck1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (holder.ck1.isChecked()) {
itemChecked[position] = true;
Log.i("This is", " checked: " + position);
}
else {
itemChecked[position] = false;
Log.i("This is", " not checked: " + position);
}
}
});
return convertView;
}
}
android中存储某些对象状态的一种常见方法是SharedReference。基本上,您将键值对存储在应用程序的专用文件中。在活动中,您可以通过onDestroy()方法最合理地存储按钮的状态,如下所示:
SharedPreferences prefs = getSharedPreferences(
"file_name", Context.MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putBoolean("BUTTON_SELECTED", true);
editor.commit();
SharedPreferences prefs = getSharedPreferences(
"file_name", Context.MODE_PRIVATE);
boolean isButtonSelected = prefs.getBoolean("BUTTON_SELECTED", false);
您可以在活动的onCreate()方法中合理地保持相同按钮的状态,如下所示:
SharedPreferences prefs = getSharedPreferences(
"file_name", Context.MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putBoolean("BUTTON_SELECTED", true);
editor.commit();
SharedPreferences prefs = getSharedPreferences(
"file_name", Context.MODE_PRIVATE);
boolean isButtonSelected = prefs.getBoolean("BUTTON_SELECTED", false);
然后你可以设置这个按钮的最后状态 查看
SharedReferences
。您是从哪里获得存储的名称的,为什么不像前面5行一样使用复选框1
?(pref的名称也是如此)我在代码中这样做了,但当我向下滚动按钮时,按钮会自动被选中,您可以在适配器中这样做,因为您可以访问ApplicationContext。然而,这些都是昂贵的IO操作,因此您需要注意何时调用它们。