【问题标题】:why do I have to click twice on back button to reach previous activity when progress dialog running?为什么在进度对话框运行时必须单击两次后退按钮才能到达上一个活动?
【发布时间】:2020-01-13 08:33:29
【问题描述】:

当用户想要在对话框运行时返回上一个活动时,我希望它应该是单击(如 youtube)。在我的情况下,在第一次返回时单击进度对话框停止并显示一个空白页面,直到我的数据没有加载并在第二次后按时进入上一个活动....

我不希望这两次后按它会非常刺激用户使用应用程序。

有什么解决方案,因为我看了其他问题,但它不符合我的要求....

我在对话框中使用了以下代码:

    progressDialog = new ProgressDialog(NextActivity.this );
    progressDialog.setMessage("Loading....");
    progressDialog.show();
    progressDialog.setCanceledOnTouchOutside(false);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progressDialog.setCancelable(false);

完整代码:

 @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.nextwhatsandroid_layout);
    progressDialog = new ProgressDialog(NextActivity.this );
    progressDialog.setMessage("Loading....");
    progressDialog.show();
    progressDialog.setCanceledOnTouchOutside(false);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
   // progressDialog.setCancelable(true);

    progressDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
        @Override
        public void onDismiss(DialogInterface dialog) {
            //here, dismiss your dialog and finish your activity too
            progressDialog.dismiss();
            finish();
        }
    });

    Toolbar toolbar = (Toolbar) findViewById(R.id. toolbar );
    setSupportActionBar( toolbar );

    if (getSupportActionBar() != null) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }
    Intent intent = getIntent();
    String title = intent.getStringExtra("title");
    String hello=intent.getStringExtra("hii");
    String id = intent.getStringExtra("id");
     Log.e("ashwini", String.valueOf(id));
    getSupportActionBar().setTitle(title);
    /*Create handle for the RetrofitInstance interface*/
    DescriptService service =    DescriptClientInstance.getRetrofitInstance().create(DescriptService.class);

    Call<DescriptionModel> call = service.getAllPhotos(id);

    call.enqueue(new Callback<DescriptionModel>() {
        @Override
        public void onResponse(Call<DescriptionModel> call, Response<DescriptionModel> response) {
            progressDialog.dismiss();
            DescriptList=response.body();
            generateDataList(DescriptList);
        }

        @Override
        public void onFailure(Call<DescriptionModel> call, Throwable t) {
            progressDialog.dismiss();

            Toast.makeText(getApplicationContext(), "Something went wrong...Please try later!", Toast.LENGTH_SHORT).show();
        }
    });
}
private void generateDataList(DescriptionModel photoList) {
    recyclerView = findViewById(R.id.recyclenext);
    LinearLayoutManager manager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(manager);
    recyclerView.setHasFixedSize(true);
    adapter = new NextAndroidAdapter(getApplicationContext(),photoList);
    recyclerView.setAdapter(adapter);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    if (item.getItemId() ==android.R.id.home) {
        finish();
    }
    return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
    super.onBackPressed();
}

需要帮助..提前谢谢...

【问题讨论】:

  • 你能在代码中分享你的问题的图像或屏幕吗?
  • progressDialog.show(); - 为什么你把这行加了两次?
  • @AkanshiSrivastava ..如果我不显示进度对话框,那么它将显示一个空白,直到我的数据数据加载..这对用户来说很不方便..progrees 对话框是必须的
  • @Wini 我明白显示进程对话框的重要性,但你为什么要调用 show() 方法两次?
  • 嘿,我评论了一个...不是两个我在显示...只有一次我在显示...@AkanshiSrivastava

标签: android progressdialog


【解决方案1】:

你可以试试这个方法

    ProgressDialog progressDialog = new ProgressDialog(this);
    progressDialog.setCanceledOnTouchOutside(false);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progressDialog.setOnKeyListener(new ProgressDialog.OnKeyListener() {
        @Override
        public boolean onKey(DialogInterface arg0, int keyCode,
                             KeyEvent event) {
            // TODO Auto-generated method stub
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                finish();
                progressDialog.dismiss();
            }
            return true;
        }

    });

【讨论】:

  • 我在哪里调用这个?因为我把这个 backpressed() 方法,但情况仍然是一样的
  • 不,写在“progressDialog.show();”之后并使 cancelable true ,您可以检查已编辑的答案。而且我认为不需要“progressDialog.setCanceledOnTouchOutside(false);”这个
  • 当我单击该活动加载时这不起作用..即使我不按返回按钮,它也会在 2 秒后自动关闭
  • 评论您的对话代码并复制我编辑的答案。我已经尝试过并且工作正常。你在哪里显示对话框?在 onCreate 或其他地方?
  • 查看上面的完整代码...当我单击该活动进行加载时...即使我不按返回按钮,它也会在 2 秒后自动关闭
【解决方案2】:

请使用 Dialog 来创建加载器。后退动作将被冻结,直到对话框关闭。后面的动作会很完美。

        Dialog dialog = new Dialog(context);
        AlertDialog.Builder builder = new AlertDialog.Builder(context);

        builder.setTitle(context.getResources().getString(R.string.title))
                .setIcon(R.drawable.icon)
                .setCancelable(false);

        LayoutInflater inflater = LayoutInflater.from(context);
        View dialogView = inflater.inflate(R.layout.dialog_view, null);
        builder.setView(dialogView);
        dialog = builder.create();
        dialog.show();

在 api 响应之后。使用下面的代码行关闭对话框

       dialog.dismiss();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 2013-10-31
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    相关资源
    最近更新 更多