【问题标题】:Android OnClickListener change button text or show progresAndroid OnClickListener 更改按钮文本或显示进度
【发布时间】:2018-08-15 20:26:44
【问题描述】:

我试图在保存文件之前设置按钮的文本。该文件需要一段时间才能保存。因此,当单击按钮时,它似乎没有做任何事情。我尝试将按钮设置为正在保存...在它转到保存文件功能之前,然后在完成后将其更改回来。甚至试图显示一个进度对话框,但它在功能完成后显示。如何在函数启动之前显示要更改的文本或进度对话框?

fileExport.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        progress = new ProgressDialog(activity);
        progress.setTitle(null);
        progress.setMessage("Saving Device...");
        progress.show();

        fileExport.setText("Saving.....");

        AlertDialog.Builder builder = new AlertDialog.Builder(activity);
        AlertDialog alert;

        if (delegate.export()) {   //save file
            builder.setCancelable(false);
            builder.setTitle("Export Successful");
            builder.setMessage("Your settings were exported successfully to " + AppDelegate.path + ".");
            builder.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            alert = builder.create();
            alert.show();
        } else {
            builder.setCancelable(false);
            builder.setTitle("Export Unsuccessful");
            builder.setMessage("Error! There was a problem exporting your settings. Please try again.");
            builder.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            alert = builder.create();
            alert.show();
        }
        fileExport.setText("Export to File");
    }
});

【问题讨论】:

    标签: android button onclicklistener progress settext


    【解决方案1】:

    问题是您将这两个进程放在同一个线程上。这意味着在文件完成保存之前它不会更新按钮的文本。查看异步任务http://reference.wolfram.com/language/tutorial/AsynchronousTasks.html, 将其作为 AsyncTask 执行(当您需要更新 UI 时,这可能是更好的选择)

    在您的活动中,创建 Async 类的实例并执行。

    SaveData save = new SaveData();
    save.execute();
    

    将 AsyncTask 子类化为 Activity 中的私有类

    private class SaveData extends AsyncTask<String, Void, Boolean>{
    
    @Override
    protected Boolean doInBackground(String... params) {
        // your background code here. Don't touch any UI components
    
        if(your code worked...)
            return true;                
        else
            return false;
    }
    
    protected void onPostExecute(Boolean result) {
         //This is run on the UI thread so you can do as you wish here
         if(result)
             Toast successful
         else
             Toast unsuccessful
     }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多