怎么禁用点击按钮?

时间:2017-11-30 17:11:10

标签: java android

我在特定文件夹中有来自服务器的下载文件按钮,我想要

禁用按钮单击,如果文件下载之前按特定名称

 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);
                }

4 个答案:

答案 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);
  }
}