2017-07-27 644 views
6

由於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

你可以發佈代碼登錄? –

回答

9

由於它的Androidö文檔中提到:

此類被廢棄在API級別26. ProgressDialog是模態 對話框,從而阻止用戶從與應用程序進行交互。取而代之的是使用此類的 ,您應該使用進度指示器,如 ProgressBar,它可以嵌入到應用程序的用戶界面中。或者, 您可以使用通知來通知用戶任務的進度。

您可以使用TextView和ProgressBar創建自定義視圖並管理其可見性。 也可以使用this library,因爲它使用AlertDialog而不是ProgressDialog。

+0

你相信如果我想要一個微調進度條就像progressDialog那樣工作。標題和其他消息?當我們從活動轉移到片段時,進度條是否顯示? – Alok

+0

我已經使用這個庫,但它說的東西不像AlertDialog alertdialog = new SpotsDialog(context);這是給我一個錯誤,我已經將它從AlertDialog更改爲SpotsDailog,但仍然不顯示。因爲我通常只是從一個活動轉移到另一個活動而沒有任何進度條! – Alok

+0

真棒兄弟:)這對我工作非常感謝你:) –

1

您可以使用ProgressBar而不是ProgressDialog。 在自定義對話框中創建一個ProgressBar,其中包含您需要的TextView和其他窗口小部件。

1

是的,API level 26已棄用,建議您只效法progressbar

使用此代碼段用於創建編程:

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

只是以供將來參考,改變android.R.attr.progressBarStyleSmallandroid.R.attr.progressBarStyleHorizontal

也許這個guide可以幫助你。

我希望這可以幫助你。

+0

更多參考https://stackoverflow.com/questions/45373007/progressdialog-is-deprecated-what-is-the-alternate-one-to-使用 –

1

這個類是在API級26

ProgressDialog棄用是模態對話框,從而阻止從 與應用程序交互的用戶。您應該使用 進度指示器,例如ProgressBar,它可以嵌入您的 應用的用戶界面中,而不是使用此類。或者,您可以使用通知通知用戶 任務的進度。

https://developer.android.com/reference/android/app/ProgressDialog.html

1

你需要它,並顯示創建進度的自定義XML佈局文件來代替。我一直在使用像https://github.com/Q115/DelayedProgressDialog這樣的庫來獲得這個簡單的行爲。

用法:

DelayedProgressDialog progressDialog = new DelayedProgressDialog(); 
progressDialog.show(getSupportFragmentManager(), "tag"); 
-2

的ProgressDialog在你的榜樣將永遠不會成爲可見的,因爲你show()後立即打電話dismiss()。創建一個Intent並致電startActivity()不會阻塞:基本上,您只需安排切換到另一個要「即將」執行的活動。

你必須在dismiss()呼叫轉移到你的活動的的onStop:

@Override 
protected void onStop() 
{ 
    super.onStop(); 
    mProgressDialog.dismiss(); 
} 

而且有人可能會問:爲什麼從一個活動並切換到另一個需要很長時間在這種情況下?我猜你的MainActivity在onCreate/onStart/onResume方法中做了一些繁重的工作。處理這種情況的一種更好的方法可能是將所有這些工作放到一個單獨的線程中。

0

這是我設法放在一起,因爲該類已在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); 
       } 
      } 
     } 

} 

好了,這是我的黑客,所以我希望它幫助。