22

我的活動類擴展了android.support.v7.app.ActionBarActivity。我請求窗口功能,並在onCreate()方法調用setSupportProgressBarIndeterminateVisibility()如下:setSupportProgressBarIndeterminateVisibility raise與Android 5.0 SDK(API 21)一起使用時發生java.lang.NullPointerException

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
    setContentView(R.layout.activity_main); 
    setSupportProgressBarIndeterminateVisibility(true); 
} 

我不能把握什麼是錯我的代碼,爲什麼我收到java.lang.NullPointerExceptionsetSupportProgressBarIndeterminateVisibility()提高。

我gradle這個依賴性包含:

compile 'com.android.support:appcompat-v7:21.0.0' 

是否有人知道如何使用API​​ 21使用不確定的進度欄在support.v7行動吧?

回答

21

this comment克里斯·巴內斯(程序兼容性的作者)程序兼容性V21公佈後:

無論哪種方式,進度條的不支持工具欄了。

爲什麼:

因爲工具欄是一個高度集中的小部件。如果你想要一個ProgressBar,你可以自己將它添加到工具欄(它只是一個ViewGroup)。

我希望更多的信息,因爲官方文檔很快就會在這裏更新。

32

您需要使用工具欄而不是ActionBar並將ProgressBar添加到工具欄中。

這是一個簡單的解決方案,將不確定的ProgressBar插入工具欄;原來,這是完全不困難:)只要把你的進度XML元素工具欄裏面是這樣的:

<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/toolbar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:minHeight="?attr/actionBarSize" 
    android:background="?attr/colorPrimary"> 

    <ProgressBar 
     android:id="@+id/progress_spinner" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="end" 
     android:indeterminate="true" 
     android:visibility="gone" /> 

</android.support.v7.widget.Toolbar> 

,然後在AppCompatActivity,簡單地檢索工具欄後取回進度,並設置進度可見或在需要時隱形。

protected void onCreate(Bundle savedInstanceState) 
{ 
    setContentView(R.layout.toolbar); 

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

    progressBar = (ProgressBar) findViewById(R.id.progress_spinner); 

    //Make progress bar appear when you need it 
    progressBar.setVisibility(View.VISIBLE); 

    //Make progress bar disappear 
    progressBar.setVisibility(View.INVISIBLE); 
} 

希望這有助於:)

編輯:更換ActionBarActivity與AppCompatActivity按照最新的Android支持庫的準則。

+0

優秀的答案!在一個可能不相關的說明中,我有與上面完全相同的佈局代碼(也許我從之前的答案中得到了它),但在運行4.4.2的Galaxy S5上忽略了「visibility = gone」。我必須以編程方式通過id找到ProgressBar視圖並將其可見性設置爲View.GONE。你認爲這是某種appcompat問題嗎? – swooby 2015-06-04 22:45:28

+0

@swooby我有Galaxy S5運行5.0和可見性=消失的工作就好了(使用最新的支持庫appcompat-v7:22.2。)。也許這是一個特定的舊appcompat或4.4.2特定的錯誤。不過,如果您不需要使用工具欄空間作爲其他東西,也可以使用「可見性=不可見」。 – ABVincita 2015-07-10 05:04:12

+1

xml代碼應該改進爲: 'android:layout_gravity =「end」'。 – drindt 2015-08-01 10:47:09

相關問題