2014-10-18 20 views
12

Sau khi cập nhật SDK của tôi lên tất cả các tính năng mới nhất của Android 5.0, tôi không thể sử dụng thanh tiến trình được tích hợp trong ActionBar trong appcompat. Tôi đã thực hiện tất cả các cố định thông thường (di chuyển supportRequestWindowFeature() gọi đến trước setContent() và trước khi siêu cuộc gọi trong oncreate) nhưng không có gì hoạt động. Đây là những gì tôi đang làm:tiến trình hiển thị ứng dụng trong thanh tác vụ gây ra NPE

public class LoginActivity extends ActionBarActivity { 
protected void onCreate(Bundle savedInstanceState) { 
    supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.login); 
    ... 
    loginButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
       ... 
       setSupportProgressBarIndeterminateVisibility(true); 
     } 
    }); 

} và stack trace:

10-18 19:38:21.053: E/AndroidRuntime(11206): java.lang.NullPointerException: Attempt to invoke  virtual method 'void android.support.v7.internal.widget.ProgressBarCompat.setVisibility(int)' on a null object reference 
10-18 19:38:21.053: E/AndroidRuntime(11206): at android.support.v7.app.ActionBarActivityDelegateBase.updateProgressBars(ActionBarActivityDelegateBase.java:786) 
10-18 19:38:21.053: E/AndroidRuntime(11206): at android.support.v7.app.ActionBarActivityDelegateBase.setSupportProgressBarIndeterminateVisibility(ActionBarActivityDelegateBase.java:692) 
10-18 19:38:21.053: E/AndroidRuntime(11206): at android.support.v7.app.ActionBarActivity.setSupportProgressBarIndeterminateVisibility(ActionBarActivity.java:327) 
10-18 19:38:21.053: E/AndroidRuntime(11206): at com.myapppackage.LoginActivity$2.onClick(LoginActivity.java:82) 

Đây là trên Nexus 5 chạy Android 4.4.4. Chủ đề ứng dụng kế thừa từ Theme.AppCompat. Các ứng dụng được xây dựng với Android 5.0 và targetSDK là 21. Khi tôi sử dụng setSupportProgress cho một thanh tiến trình ngang bình thường cùng một điều sẽ xảy ra. Bất kỳ giúp đỡ nhiều đánh giá cao.

EDIT: Đã tìm thấy sự cố. Trong android.support.v7.internal.widget.ToolbarWidgetWrapper:

@Override 
public void initIndeterminateProgress() { 
    Log.i(TAG, "Progress display unsupported"); 
} 

Có thể không phải là lỗi mà là một tính năng? Thanh công cụ dường như là các ActionBars mới.

Tôi có một bản sao của appcompat V20 trên máy tính khác vì vậy tôi sẽ quay lại điều đó.

+2

Xác nhận từ Chris Banes https://chris.banes.me/2014/10/17/appcompat-v21/#comment-1642002459 – Mark

+0

Xin chào, tôi cũng gặp phải vấn đề tương tự. Tôi tin rằng toàn bộ điểm bây giờ là bạn phải tạo thanh tiến trình của riêng bạn bên trong thanh công cụ. Khá nhiều những gì Chris Banes nói. Tôi đang tìm kiếm các giải pháp mà mọi người đã làm nên tôi không mạo hiểm để tạo nên thứ của riêng mình. – lazypig

Trả lời

2

EDIT: Phần dưới đây không hoạt động vì ProgressBarCompat là lớp ẩn và không thể thêm vào bố cục XML của bạn. Nó giống như một lỗi trong thư viện appcompat.


Nó được tìm kiếm một thanh tiến trình trong ActionBarActivityDelegateBase.java:

private ProgressBarCompat getCircularProgressBar() { 
    ProgressBarCompat pb = (ProgressBarCompat) mActivity.findViewById(R.id.progress_circular); 
    if (pb != null) { 
     pb.setVisibility(View.INVISIBLE); 
    } 
    return pb; 
} 

Và sử dụng nó trong các updateProgressBars() phương pháp trong cùng một lớp. Có vẻ như nhà phát triển có thể thêm ProgressBarCompat vào hoạt động của bạn.

+1

Tôi đã liên kết nó trong câu trả lời của mình nhưng Google sẽ xóa tính năng này khỏi thư viện ứng dụng. https://code.google.com/p/android/issues/detail?id=78310 – SWoo

4

Dường như tiến trình không xác định và thanh tiến trình ngang không được hỗ trợ trong thư viện hỗ trợ V21. Từ android.support.v7.internal.widget.ToolbarWidgetWrapper:

@Override 
public void initIndeterminateProgress() { 
    Log.i(TAG, "Progress display unsupported"); 
} 

Chris Banes đã xác nhận điều này: http://chris.banes.me/2014/10/17/appcompat-v21/#comment-1642002459. Tôi đang sử dụng một bản sao cũ của appcompat v20. Đây là một zip cho bất cứ ai cần nó: https://drive.google.com/file/d/0B2dSjU9N8KdZUEFuMkhLZzJZOFU/view?usp=sharing

12

Một cách giải quyết có thể cho điều này là tự thêm một ProgressBar như một giao diện tùy chỉnh và ghi đè setSupportProgressBarIndeterminateVisibility

Trong onCreate:

ProgressBar progressBar = new ProgressBar(this); 
progressBar.setVisibility(View.GONE); 
progressBar.setIndeterminate(true); 
getSupportActionBar().setDisplayShowCustomEnabled(true); 
getSupportActionBar().setCustomView(progressBar); 

Trong hoạt động của bạn:

@Override 
public void setSupportProgressBarIndeterminateVisibility(boolean visible) { 
    getSupportActionBar().getCustomView().setVisibility(visible ? View.VISIBLE : View.GONE); 
} 

Tất nhiên chuyển sang một Thanh công cụ và thêm ProgressBar sẽ có nhiều tương lai hơn.

+0

Điều này hoạt động nếu bạn sử dụng setCustomView với các tham số bố cục được đặt thành trọng lực trên cùng và chiều rộng để khớp với cha mẹ. Thật không may, nó không bao gồm 100% chiều rộng của thanh hành động nếu có một tiêu đề và menu 3 chấm hiện diện. Tôi đã hy vọng cho một phong cách tròn một ở phía trên bên phải của thanh hành động, nhưng điều này có thể là một cái nhìn up-to-date anyway. – Mark

+0

hai thanh tiến trình xuất hiện không biết tại sao ?? – user2273146

Các vấn đề liên quan