Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在BaseActivity中使用ProgressBar而不是不推荐的ProgressDialog?_Android_Progressdialog_Android Progressbar - Fatal编程技术网

Android 如何在BaseActivity中使用ProgressBar而不是不推荐的ProgressDialog?

Android 如何在BaseActivity中使用ProgressBar而不是不推荐的ProgressDialog?,android,progressdialog,android-progressbar,Android,Progressdialog,Android Progressbar,既然API级别26中已经弃用了,我们如何使用它呢?特别是,我们如何能够以一种可以在所有活动/片段之间共享的方式来实现这一点 在BaseActivity中使用ProgressDialog的示例: public abstract class BaseActivity extends AppCompatActivity { private ProgressDialog mProgressDialog; @Override public void showLoading() { //...

既然API级别26中已经弃用了,我们如何使用它呢?特别是,我们如何能够以一种可以在所有活动/片段之间共享的方式来实现这一点

在BaseActivity中使用ProgressDialog的示例:

public abstract class BaseActivity extends AppCompatActivity {

private ProgressDialog mProgressDialog;

@Override
public void showLoading() {
    //...
}

@Override
public void hideLoading() {
    //..
}
现在这是一个非常干净的解决方案,因为ProgressDialog不是一个小部件,不需要是任何视图xml的一部分。由于ProgressBar必须在一个xml文件中声明,因此如何以与ProgressDialog相同的方式使用它

我正在使用一个带有相应的
活动的
导航抽屉
,我交换
片段
来提供内容。

活动

public abstract class BaseActivity extends AppCompatActivity {
    private ProgressBar progressBar;

    public void showLoading() {
        progressBar.setVisibility(View.Visible);
    }

    public void hideLoading() {
        progressBar.setVisibility(View.Gone);
    }
}
碎片

((BaseActivity) getContext).showLoading();
现在,这是一种既简单又不安全的方法

另一种方法是在你的活动中实现这一点。在xml中放置一个progresbar

public interface OnProgressChanged {
    void show();
    void hide();
}
然后在每个片段上

OnProgressChanged onProgressChangedListener;

@override
onAttach(Context context) {
    Activity activity = null;

    if (context instanceof Activity){
        activity = (Activity) context;
    }

    try {
        onProgressChangedListener = (OnProgressChanged) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString() + " must implement OnProgressChanged");
    } catch(NullPointerException e) {
        throw new ClassCastException("Error: onAttach(Context context) -> context not instance of Activity");
    }
}


// somewhere else in the code
onProgressChangedListener.show();

有很多方法可以做你想做的事。如果我是你,我会研究MVP模式。

你有两个选择,要么选择一个带有进度条的自定义对话框。或者直接将进度条集成到布局中。选择更适合您的用例的选项。这是一种从模式弹出窗口的转变,它在任务进行时挂起您的整个应用程序。。。android建议取消这种模式对话框——只显示一个简单的progressbar,这样用户可以在后台服务运行时继续使用应用程序的其余部分。那么你的建议是将progressbar集成到DrawerActivity布局中?这是我的想法,但并没有提供最好的解决方案,例如,如果我想添加一些其他活动,我不会涵盖BaseActivity中的所有内容。。。我想我会使用自定义对话框,无论如何感谢@SagarNayakYou意思是
((BaseActivity)getActivity())。showLoading()
用于片段,showLoading()
用于活动,但是如果
getActivity()
返回空值呢?:)空检查一下,很明显吗?