Tôi đang cố triển khai nút làm mới trong ứng dụng của mình để cho phép người dùng tự đồng bộ hóa lại với máy chủ web. Mã hoạt động, nhưng tôi đang gặp khó khăn trong việc tìm ra các khung nhìn hành động (ít nhất, tôi nghĩ đó là những gì tôi cho là đang sử dụng).Thay đổi chế độ xem trên Menu Mục trong Thanh tác vụ
mục trình đơn của tôi là ở đây:
<item
android:id="@+id/main_menu_refresh"
android:enabled="true"
android:icon="@drawable/refresh"
android:orderInCategory="1"
android:showAsAction="ifRoom"
android:title="@string/refresh"
android:actionViewClass="android.widget.ProgressBar">
</item>
Vấn đề là, nó luôn luôn hiển thị ProgressBar. Tôi tự hỏi liệu nó có hoạt động giống như tiện ích tìm kiếm (ví dụ duy nhất tôi thực sự thấy trực tuyến) và thêm thẻ collapseActionView
vào số showAsAction
và ngăn không cho nó hiển thị ngay lập tức. Tuy nhiên, khi tôi nhấp vào nút làm mới, biểu tượng sẽ biến mất (tốt), nhưng tiêu đề cũng vậy trong thanh tác vụ và ProgressBar xuất hiện ở bên trái của cửa sổ có tiêu đề được sử dụng. Cũng không phải những gì tôi muốn.
Như một cái gì đó của một nỗ lực cuối cùng, tôi đã cố gắng để thêm video này vào mã của tôi, và loại bỏ các actionViewClass
từ XML:
MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
Log.w("MyApp", "Have Menu");
ProgressBar pb = new ProgressBar(ReadingList.this);
refresh.setActionView(pb);
đó không làm việc, hoặc, đem lại cho tôi một lỗi con trỏ null trên setActionView
.
Tôi cần một giải pháp mà tôi có thể gọi từ bất kỳ chức năng nào (có một khoảng thời gian tự động đồng bộ lúc đầu tôi muốn ProgressBar hiển thị trong thời gian), và có thể trả về biểu tượng tĩnh sau đó.
Tôi đã thử đọc qua this question, nhưng tôi không hiểu được câu trả lời có ý nghĩa gì. Tôi cảm thấy như tôi đang cố gắng làm những gì nó nói, nhưng tôi đoán là không. Bất kỳ hỗ trợ nào được đánh giá cao.
Chỉnh sửa: Đối với đề xuất của sastraxi.
public class IconSwitcher extends LinearLayout{
public IconSwitcher(Context context) {
super(context);
ProgressBar pb = new ProgressBar(context);
ImageView iv = new ImageView(context);
addView(iv);
addView(pb);
}
}
Đây là lớp học của tôi cho đến nay. Tuy nhiên, khi tôi thử và tham khảo nó với:
MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
IconSwitcher ic = (IconSwitcher) refresh.getActionView();
Tôi gặp lỗi con trỏ null. về cách tạo IconSwitcher. Nút XML như sau:
<item
android:id="@+id/main_menu_refresh"
android:enabled="true"
android:icon="@drawable/refresh"
android:orderInCategory="1"
android:showAsAction="ifRoom"
android:title="@string/refresh"
android:actionViewClass="IconSwitcher">
</item>
Tôi chỉ gặp khó khăn khi tham khảo Chế độ xem IconSwitcher đó.
Chỉnh sửa 2: Tôi hết sức gặp sự cố khi tham khảo Mục trình đơn.
MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
refresh.setVisible(false);
Cũng cung cấp cho tôi con trỏ rỗng khi tôi thử và đặt chế độ hiển thị. Có gì sai với tài liệu tham khảo của tôi?
Đây không phải là lỗi tại setActionXem nhưng tại thời điểm bạn đang làm (MenuItem) findViewById (R.id.main_menu_refresh). Nó rõ ràng là một ClassCastException để cast ActionItemView đến MenuItem. – Namratha
Tôi đã tìm ra. Tôi đã tìm thấy câu hỏi trước đây [SO] (http://stackoverflow.com/questions/7142722/replacing-an-actionbar-menu-item-icon-with-an-indeterminate-progressbar). Từ đó, tôi đã tìm thấy mã Google đã viết về việc này [ở đây] (http://developer.android.com/resources/samples/ActionBarCompat/src/com/example/android/actionbarcompat/ActionBarHelperHoneycomb.html). Về cơ bản nó đã được sao chép và dán vào thời điểm đó, và hoạt động hoàn hảo. –