Tôi đang sử dụng SearchView để khởi chạy Hoạt động mới hiển thị kết quả tìm kiếm. Tôi đã theo dõi các nguồn sau:
Hoạt động có thể tìm kiếm mới Danh sáchHoạt động
是从 Hoạt động chính
Được khởi chạy bởi tiện ích SearchView trong thanh ứng dụng. Hoạt động có thể tìm kiếm mới đã bắt đầu nhưng mục đích tìm kiếm bị thiếu (chưa bao giờ được gọi trênNewIntent
phương pháp).
Có thể tìm kiếm.xml
android:label="@string/app_label"
android:hint="@string/search_hint" >
AndroidManifest.xml
<ứng>ứng>
...
android:name="android.app.default_searchable"
android:value=".ui.ListActivity" />
android:name=".ui.MainActivity"
...
android:name=".ui.ListActivity"
android:launchMode="singleTop"
...
android:name="android.app.searchable"
android:resource="@xml/searchable" />
Hoạt động chính
lớp công khai MainActivity mở rộng AppCompatActivity {
@Ghi đè
khoảng trống được bảo vệ trênCreate(Gói đã lưuInstanceState) {
// setSupportActionBar
}
@Ghi đè
boolean công khai onCreateOptionsMenu(Menu Menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setSearchableInfo( searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
trả về đúng sự thật;
}
}
Danh sáchHoạt động
lớp công khai ListActivity mở rộng AppCompatActivity {
@Ghi đè
khoảng trống được bảo vệ trênCreate(Gói đã lưuInstanceState) {
Log.d(TAG, "onCreate đã gọi"); //Nhật ký được in
...
}
@Ghi đè
protected void onNewIntent(Ý định có ý định) {
Log.d(TAG, "onNewIntent được gọi"); //Nhật ký KHÔNG được in
}
}
Xem xét rằng tôi cũng sử dụng Tên thành phần mới (cái này, ListActivity.class)
thay thế getComponentName()
Nhưng nhận được kết quả tương tự: không có lỗi, không có truy vấn Ý định.
theo tài liệu của onNewIntent() :
Điều này được gọi cho các hoạt động đặt launchMode thành "singleTop" trong gói của họ hoặc nếu khách hàng sử dụng FLAG_ACTIVITY_SINGLE_TOP gắn cờ khi gọi startActivity(Ý định)Trong cả hai trường hợp, khi hoạt động được khởi chạy lại khi đang ở đầu ngăn xếp hoạt động thay vì một phiên bản mới của hoạt động đang được bắt đầu, onNewIntent() sẽ được gọi trên phiên bản hiện có với Ý định đã được sử dụng để khởi động lại . khởi động nó.
đơn hàng đầu
Chỉ trong Hoạt động (trong trường hợp của bạn Danh sáchHoạt động
) ở trên cùng - nó không tạo phiên bản mới mà sử dụng lại phiên bản hiện có. Tuy nhiên, nếu bạn chỉ bắt đầu với Hoạt động chính
Tìm kiếm (trở lại sau khi tìm kiếm Danh sáchHoạt động
), thì bạn sẽ phá hủy Danh sáchHoạt động
instance, sau đó tạo một instance mới - thực hiện lệnh gọi tới onCreate()
, nhưng không gọi onNewIntent()
.
Tôi là một lập trình viên xuất sắc, rất giỏi!