2013-09-27 152 views
16

Tôi cần phải sử dụng kết hợp thanh tác vụ và các đoạn trong một trong các ứng dụng Android của tôi nhắm mục tiêu Gingerbread. Vì vậy, tôi đã sử dụng thanh hành động từ thư viện hỗ trợ v7 và các đoạn từ thư viện hỗ trợ v4 và mở rộng lớp của tôi với FragmentActivity.ActionBar (Hỗ trợ) với Fragment (hỗ trợ)

tôi nhận được một lỗi khi tôi gõ ra dòng

actionbar = getSupportActionBar(); 

Lỗi khẳng định rằng getSupportActionBar() là undefined cho các loại myFragmentClass (tên lớp của tôi). Mã hoạt động hoàn hảo mà không có thư viện hỗ trợ. Có giải pháp cho vấn đề của tôi không?

Cảm ơn!

+1

Bạn đã nhập thư viện phải không? android.support.v7.app.ActionBar –

+0

Tôi đã làm. Tôi cũng có thanh tác vụ để hoạt động. Vấn đề xảy ra khi tôi cố gắng bao gồm mảnh vỡ. – Anirudh

Trả lời

19

Bạn phải mở rộng ActionBarActivity thay vì FragmentActivity có Actionbar với mảnh.

Nếu bạn đang sử dụng thư viện appcompat v7, hoạt động của bạn thay vào đó nên mở rộng ActionBarActivity, là lớp con của FragmentActivity (để biết thêm thông tin, hãy đọc Thêm thanh tác vụ).

Bạn có thể tìm thêm thông tin tại trang được đưa ra bên dưới. Dòng trên được lấy từ trang bên dưới (Đoạn cuối). http://developer.android.com/training/basics/fragments/creating.html

Chỉnh sửa- Đây không phải là lỗi. Thiếu kiến ​​thức của nó. Đôi khi cơ bản không rõ ràng. Tôi hiện đang học, điều đó quá từ trang web android, và đó là cách tôi đã cung cấp cho bạn câu trả lời.

+1

Có, tôi nhận được nó hoạt động sau một vài ngày, bằng cách mở rộng ActionBarActivity. Chỉ cần quên cập nhật bài đăng của tôi. Cảm ơn câu trả lời của bạn! – Anirudh

1

Để gọi ActionBar bên trong một Fragment sử dụng này:

actionbar = getActivity().getSupportActionBar(); 

Một Fragment không có ActionBar nhưng hoạt động. Đó là lý do tại sao bạn phải gọi nó theo cách này.

+0

Tôi không thể nhận được tùy chọn getActivity() trong eclipse – Anirudh

+0

Điều này không liên quan gì đến nhật thực. Hãy chắc chắn để gọi dòng này trong một Fragment. –

+0

Phương thức getActivity() là không xác định cho lớp: Đó là lỗi tôi nhận được khi tôi thêm mã. – Anirudh

40

ghi mã này trong OnAttach() phương pháp:

actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar(); 

ActionBarActivity bị phản đối. Sử dụng

actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();

+0

Cảm ơn câu trả lời. Sẽ thử nó lần sau. Tôi đã chuyển sang sử dụng thanh tác vụ kể từ .. – Anirudh

+0

ok..it chắc chắn sẽ hoạt động .. – bGorle

+0

Điều này đã hiệu quả! –

7

Tôi cũng đã cố gắng sử dụng:

actionbar = getActivity().getSupportActionBar(); 

và nó đã không làm việc cho đến khi tôi đã làm điều này:

ActionBar actionBar = ((ActionBarActivity)getActivity()).getSupportActionBar(); 

Vì vậy, nó làm việc khi tôi đúc để MainActivity tôi.

+0

Không sử dụng phương pháp này làm phân đoạn được thiết kế để được sử dụng lại trong nhiều hoạt động và nếu bạn sử dụng đoạn trong một hoạt động khác ngoài "MainActivity", nó sẽ bị lỗi. Câu trả lời của Bhr về việc casting cho lớp Super ActionBarActivity là chính xác. –

+0

Chính xác. Tôi không có kiến ​​thức đó rồi. – Tinashe

0

Tôi đã thử nó bằng cách mở rộng ActionBarActivity và thực hiện một số thay đổi trong AndroidManifest.xml như

<activity android:name="yourActionbarActivity" 

android: theme = "@ style/Theme.Appcompat.Light">

và nó hoạt động phạt cho tôi

-3

Không cần thực hiện bất kỳ thay đổi nào, chỉ cần sử dụng getActionBar().setTitle(title) thay vì getSupportActionBar khi bạn sử dụng FragmentActivity. Nó làm việc tốt cho tôi.

+0

Nó sẽ không hoạt động trên tất cả các thiết bị. Bạn cần getSupportActionBar() để hỗ trợ các thiết bị bên dưới API 11. – Anirudh

7

cho android.support.v7

ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); 

//than next for example 
actionBar.setDisplayHomeAsUpEnabled(true);