2010-10-19 3 views
17

Tôi có một ứng dụng Android có một vài hoạt động khác nhau để duyệt các bài viết và hình ảnh được tải xuống từ RSS.Hai hoạt động searchable.xml trong một AndroidManifest.xml

Tôi muốn có thể đề nghị kết nối số search button to the Search dialog bằng tệp searchable.xml. Tôi đã cố gắng làm điều này với một tìm kiếm, sử dụng:

<activity android:name=".search.SearchResultsActivity" 
    android:label="@string/search_results_activity_title" > 
    <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
    </intent-filter> 
    <meta-data android:name="android.app.searchable" 
     android:resource="@xml/searchable_articles"/> 
</activity> 

và trong <application />

<meta-data android:name="android.app.default_searchable" 
    android:value=".search.SearchResultsActivity" /> 

bây giờ tôi có thể khởi chạy hộp thoại tìm kiếm từ bất kỳ hoạt động, và nó sẽ khởi động SearchResultsActivity.

Tôi muốn có thể tìm kiếm hình ảnh khi người dùng là ImageListActivity, sử dụng searchable_images.xml và sử dụng mặc định ở mọi nơi khác.

Tôi có một SearchResultsImageActivity bao gồm phần tử siêu dữ liệu sau và sử dụng cùng một phần tử trong ImageListActivity.

<meta-data android:name="android.app.searchable" 
    android:resource="@xml/searchable_images"/> 

On nhấn nút tìm kiếm trong ImageListActivity, tôi nhận được tìm kiếm mặc định từ searchable_articles.xml.

Nếu tôi thay đổi default_searchable thành SearchResultsImageActivity, tìm kiếm hình ảnh luôn được khởi chạy và tìm kiếm bài viết sẽ không bao giờ được khởi chạy.

Nếu tôi xóa hoàn toàn phần tử siêu dữ liệu default_searchable và thêm searchable các hoạt động chỉ chọn dữ liệu meta, không có tìm kiếm nào được khởi chạy.

Tôi khá chắc chắn điều này nên có thể, nhưng tôi không biết mình đang làm gì sai.

+0

Bạn đã xác định điều này? – Dan

+0

Tôi không nghĩ rằng bạn có thể làm điều đó bằng cách sử dụng xml vì tài nguyên là một trong một với một Intent. Bạn có thể chuyển tài nguyên trong mã của bạn. – JPM

Trả lời

1

Một cách tôi đã làm là tạo các hoạt động giả mạo sau đó chuyển đổi các hoạt động khi bạn cần chúng.

<activity android:name="activitySearchMain" /> 
    <activity android:name="activitySearchSub1"> 
    <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.ALTERNATIVE" /> 
     <category android:name="android.intent.category.SELECTED_ALTERNATIVE" /> 
     <data android:scheme="user" /> 
    </intent-filter> 
    </activity> 
    <activity android:name="activitySearchSub2"> 
    <intent-filter> 
     <action android:name="com.sample.twitter.action.SEARCH" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.ALTERNATIVE" /> 
     <category android:name="android.intent.category.SELECTED_ALTERNATIVE" /> 
     <data android:scheme="user" /> 
    </intent-filter> 
</activity> 

Tạo hai lớp được đặt tên cho hoạt động phụ.

sau đó tạo ra ý đồ như thế này khi thành phần được nhấp ...

Intent sourceIntent = getIntent(); 
Intent newIntent = new Intent(this, activitySearchSub2.class); 
newIntent.setAction(activitySearchSub2.ACTION2); 
newIntent.setData(sourceIntent.getData()); 
startActivity(newIntent); 
finish(); 

và gọi ý đồ từ onClick khi một nút được nhấp hoặc một số thành phần khác là click:

+0

Tôi đã không đi qua hoạt động này trong một mô hình hoạt động. Tôi không rõ điều này đang làm gì. – jamesh

+0

Đây là cách để tắt các hoạt động khi nhấp vào nút nhưng cho phép bạn giữ hoạt động chính ở chế độ nền. Hữu ích khi thực hiện tìm kiếm trên tài liệu từ một nguồn cấp dữ liệu RSS. – JPM

0

Nếu bạn ghi đè lên tìm kiếm hoạt động chỉ trong hoạt động đó, nó sẽ ngăn cuộc gọi tìm kiếm đi lên đến cấp ứng dụng. Giá trị trả về kiểm soát nếu cuộc gọi được truyền lên.

@Override 
public boolean onSearchRequested() { 
    onPromptSearch(); 
    return false; // don't go ahead and show the search box 
} 
4

Trong file Manifest bạn cập nhật thẻ ImageListActivity hoạt động

<activity 
    android:name=".ImageListActivity" 
    ... 

    <meta-data 
     android:name="android.app.default_searchable" 
     android:value=".SearchResultsImageActivity" /> 
</activity> 

Vì vậy, khi bạn sẽ kích hoạt tìm kiếm bản địa ImageListActivity nó sẽ gọi SearchResultsImageActivity và mặc một cho những người khác.

Giả sử SearchResultsImageActivitysearchable.

+0

Tính năng này đang hoạt động. –