ProgressDialog已弃用

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.任何帮助将让我去学习新的东西!

+0

当您使用progresBar progressBar不显示? –

+0

nopes!我使用progressBar来完成同样的事情。我做了setVisibility(View.VISIBILE)和setVisibility(View.INVISIBLE),但没有符号。 – Alok

+0

你可以发布代码登录? –

由于它的Androidö文档中提到:

此类被废弃在API级别26. ProgressDialog是模态 对话框,从而阻止用户从与应用程序进行交互。取而代之的是使用此类的 ,您应该使用进度指示器,如 ProgressBar,它可以嵌入到应用程序的用户界面中。或者, 您可以使用通知来通知用户任务的进度。

您可以使用TextView和ProgressBar创建自定义视图并管理其可见性。 也可以使用this library,因为它使用AlertDialog而不是ProgressDialog。

+0

你相信如果我想要一个微调进度条就像progressDialog那样工作。标题和其他消息?当我们从活动转移到片段时,进度条是否显示? – Alok

+0

我已经使用这个库,但它说的东西不像AlertDialog alertdialog = new SpotsDialog(context);这是给我一个错误,我已经将它从AlertDialog更改为SpotsDailog,但仍然不显示。因为我通常只是从一个活动转移到另一个活动而没有任何进度条! – Alok

+0

真棒兄弟:)这对我工作非常感谢你:) –

您可以使用ProgressBar而不是ProgressDialog。 在自定义对话框中创建一个ProgressBar,其中包含您需要的TextView和其他窗口小部件。

是的,API level 26已弃用,建议您只效法progressbar

使用此代码段用于创建编程:

ProgressBar progressBar = new ProgressBar(activity, null, android.R.attr.progressBarStyleSmall); 

只是以供将来参考,改变android.R.attr.progressBarStyleSmallandroid.R.attr.progressBarStyleHorizontal

也许这个guide可以帮助你。

我希望这可以帮助你。

+0

更多参考https://*.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); 
       } 
      } 
     } 

} 

好了,这是我的黑客,所以我希望它帮助。