我在特定文件夹中有来自服务器的下载文件按钮,我想要
禁用按钮单击,如果文件下载之前按特定名称
btinstall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
File file = new File(Environment.getExternalStorageDirectory() + "/download/app-debug.apk");
if (file.exists()) {
bt_install.setEnabled(false);
}
答案 0 :(得分:0)
在这里,只需在禁用按钮后保存标志,并在再次阅读按钮时读取该标志
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences();
if (prefs.getBoolean("disabled", false)){
bt_install.setEnabled(false);
}
btinstall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
File file = new File(Environment.getExternalStorageDirectory() + "/download/app-debug.apk");
if (file.exists()) {
bt_install.setEnabled(false);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences();
boolean statusLocked = prefs.edit().putBoolean("disabled", true).commit();
}
}
});
答案 1 :(得分:0)
哟不需要存储任何东西。如果用户从外部文件管理器中删除de文件,则会出现误报。将代码移动到onResume方法并检查是否存在。
@Override
public void onResume(){
super.onResume();
File file = new File(Environment.getExternalStorageDirectory() + "/download/app-debug.apk");
if (file.exists()) {
bt_install. setClickable(false);
}
}
答案 2 :(得分:0)
将禁用按钮移动到单击之外,以便在您创建活动时执行,而不仅仅是在执行操作后执行:
final File file = new File(Environment.getExternalStorageDirectory() + "/download/app-debug.apk");
bt_install.setEnabled(!file.exists());
btinstall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Download file and do the rest
如果按home_button你的Activity进入onPause状态,导致onCreate没有执行,那么在那种情况下再次检查这个的第二个好位置是onResume方法
@Override
public void onResume() {
super.onResume();
final File file = new File(Environment.getExternalStorageDirectory() + "/download/app-debug.apk");
bt_install.setEnabled(!file.exists());
}
答案 3 :(得分:0)
在API 11之后,您可以在Set
中存储SharedPreferences
。
以下是一个例子:
private List<String> getDownloadedFileList() {
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
List<String> downloadedFileList = Collections.emptyList();
try {
downloadedFileList = (ArrayList<String>) ObjectSerializer.deserialize(prefs.getString(TASKS, ObjectSerializer.serialize(new ArrayList<task>())));
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return downloadedFileList;
}
private void setDownloadedFileList(List<String> downloadedFileList) {
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
Editor editor = prefs.edit();
try {
editor.putString(DOWNLOADED_FILES, ObjectSerializer.serialize(downloadedFileList));
} catch (IOException e) {
e.printStackTrace();
}
editor.commit();
}
private void addDownloadedFile(String filename) {
List<String> downloadedFileList = getDownloadedFileList();
if(!downloadedFileList .contains(filename)) {
downloadedFileList.add(filename);
setDownloadedFileList(downloadedFileList );
}
}
private boolean checkDownloadedFileExists(String filename) {
return getDownloadedFileList().contains(filename);
}
然后,在设置按钮的属性时:
btinstall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
File file = new File(Environment.getExternalStorageDirectory() + "/download/app-debug.apk");
addDownloadedFile("/download/app-debug.apk");
}
最后,根据存储的值设置clickable:
@Override
public void onResume(){
super.onResume();
if (checkDownloadedFileExists("/download/app-debug.apk")) {
bt_install.setClickable(false);
}
}