ProgressDialog已弃用
由于ProgressDialog已从Android版本O弃用,我仍然在寻找更好的方法来完成我的任务。任务是从我的活动移动到片段。一切工作正常,但progressdialog不可见。我尝试过实施它,但是... progressdialog不起作用。ProgressDialog已弃用
看起来进度条会起作用,但仍然不起作用。我需要一个progressdialog,因为我很容易设置我的标题和消息。我需要一个spinner progressDialog,但不知道如何去做。这是我的工作之一,但不是执行:
的Java类
ublic class SaveVideo extends AppCompatActivity {
private Button button;
private ProgressDialog mProgressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_save_video);
mProgressDialog = new ProgressDialog(this);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.back);
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
button = (Button) findViewById(R.id.saveVideo);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//where it must be seen when the button is pressed
mProgressDialog.setTitle("Title");
mProgressDialog.setMessage("Message");
mProgressDialog.show();
Intent intent = new Intent(SaveVideo.this,MainActivity.class);
intent.putExtra("change",2);
startActivity(intent);
//as soon as the page moves from this to another fragment
mProgressDialog.dismiss();
}
});
}
我是新来的Android版本O.任何帮助将让我去学习新的东西!
由于它的Androidö文档中提到:
此类被废弃在API级别26. ProgressDialog是模态 对话框,从而阻止用户从与应用程序进行交互。取而代之的是使用此类的 ,您应该使用进度指示器,如 ProgressBar,它可以嵌入到应用程序的用户界面中。或者, 您可以使用通知来通知用户任务的进度。
您可以使用TextView和ProgressBar创建自定义视图并管理其可见性。 也可以使用this library,因为它使用AlertDialog而不是ProgressDialog。
您可以使用ProgressBar
而不是ProgressDialog
。 在自定义对话框中创建一个ProgressBar
,其中包含您需要的TextView
和其他窗口小部件。
是的,API level 26
已弃用,建议您只效法progressbar
。
使用此代码段用于创建编程:
ProgressBar progressBar = new ProgressBar(activity, null, android.R.attr.progressBarStyleSmall);
只是以供将来参考,改变android.R.attr.progressBarStyleSmall
到android.R.attr.progressBarStyleHorizontal
。
也许这个guide可以帮助你。
我希望这可以帮助你。
更多参考https://stackoverflow.com/questions/45373007/progressdialog-is-deprecated-what-is-the-alternate-one-to-使用 –
这个类是在API级26
ProgressDialog弃用是模态对话框,从而阻止从 与应用程序交互的用户。您应该使用 进度指示器,例如ProgressBar,它可以嵌入您的 应用的用户界面中,而不是使用此类。或者,您可以使用通知通知用户 任务的进度。
https://developer.android.com/reference/android/app/ProgressDialog.html
你需要它,并显示创建进度的自定义XML布局文件来代替。我一直在使用像https://github.com/Q115/DelayedProgressDialog这样的库来获得这个简单的行为。
用法:
DelayedProgressDialog progressDialog = new DelayedProgressDialog();
progressDialog.show(getSupportFragmentManager(), "tag");
的ProgressDialog在你的榜样将永远不会成为可见的,因为你show()
后立即打电话dismiss()
。创建一个Intent并致电startActivity()
不会阻塞:基本上,您只需安排切换到另一个要“即将”执行的活动。
你必须在dismiss()
呼叫转移到你的活动的的onStop:
@Override
protected void onStop()
{
super.onStop();
mProgressDialog.dismiss();
}
而且有人可能会问:为什么从一个活动并切换到另一个需要很长时间在这种情况下?我猜你的MainActivity在onCreate/onStart/onResume方法中做了一些繁重的工作。处理这种情况的一种更好的方法可能是将所有这些工作放到一个单独的线程中。
这是我设法放在一起,因为该类已在Android Oreo(API 26 +)中弃用。
在XML文件中(无论布局文件):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:padding="13dp"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ProgressBar
android:visibility="gone"
android:layout_marginTop="5dp"
android:id="@+id/top_progressBar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_height="wrap_content"
android:indeterminateTintMode="src_in"
android:indeterminateTint="@color/white"
android:indeterminate="true" />
<TextView
android:layout_width="wrap_content"
android:text="Loading..."
android:textAppearance="?android:textAppearanceSmall"
android:layout_gravity="center_vertical"
android:id="@+id/loading_msg"
android:layout_toEndOf="@+id/loader"
android:layout_height="wrap_content" />
<ProgressBar
android:visibility="gone"
android:layout_marginTop="2dp"
android:id="@+id/down_progressBar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_height="wrap_content"
android:indeterminateTintMode="src_in"
android:indeterminateTint="@color/white"
android:indeterminate="true" />
</LinearLayout>
上面的示例中
,我想到的滚动情况说你的观点是长因此两个进度条。
Java文件样本中:
public class GetUserDetails extends AppCompatActivity {
private ProgressBar topProgressBar, downProgressBar;
private ProgressDialog progressDialog;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_get_user_details);
//initilise the progressbar views and progress dialog object
topProgressBar = findViewById (R.id.top_progressBar);
downProgressBar = findViewById (R.id.down_progressBar);
if (Build.VERSION.SDK_INT < 26) {
progressDialog = new ProgressDialog (this);
} else {
topProgressBar.setIndeterminate (true);
downProgressBar.setIndeterminate (true);
}
}
private void showProgressDialog (final boolean isToShow) {
if (Build.VERSION.SDK_INT < 26) {
if (isToShow) {
progressDialog.setMessage ("Processing ...Please wait.");
progressDialog.setCancelable (false);
if (! progressDialog.isShowing()) {
progressDialog.show();
}
} else {
if (progressDialog.isShowing()) {
progressDialog.dismiss();
}
}
} else {
/* this is Android Oreo and above*/
if (isToShow) {
topProgressBar.setVisibility (View.VISIBLE);
downProgressBar.setVisibility (View.VISIBLE);
getWindow().setFlags (WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
} else {
topProgressBar.setVisibility (View.GONE);
downProgressBar.setVisibility (View.GONE);
getWindow().clearFlags (WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}
}
}
}
好了,这是我的黑客,所以我希望它帮助。
当您使用progresBar progressBar不显示? –
nopes!我使用progressBar来完成同样的事情。我做了setVisibility(View.VISIBILE)和setVisibility(View.INVISIBLE),但没有符号。 – Alok
你可以发布代码登录? –