我正在学习使用搜索栏。用户点击搜索后,它会启动2个新活动,这些新活动不再有搜索栏。它也不会更新UI。如果可能的话,我希望进行搜索并将结果全部发布在同一活动中。我正在使用Genymotion emmulator。
主要活动
div.comment *{
display:inline-block;
margin:0 .2rem;
}
div.comment p{
margin-right:1rem;
}
div.comment img{
height:25px;
width: 25px;
}
Android Mainfest
public class MainActivity extends Activity {
protected LibraryDataSource mDataSource;
protected ArrayList<String> mBookTitles;
protected ArrayList<Integer> mBookPages;
private EditText mEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDataSource = new LibraryDataSource(MainActivity.this);
mBookTitles = new ArrayList<>();
mBookPages = new ArrayList<>();
Book book1 = new Book("Harry potter", 15);
Book book2 = new Book("Far Cry", 25);
Book book3 = new Book("Jumpman", 35);
List<Book> books = new ArrayList<>();
books.add(book1);
books.add(book2);
books.add(book3);
mDataSource.open();
mDataSource.deleteAll();
mDataSource.insertBook(books);
mEditText = (EditText) findViewById(R.id.title_type);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.search) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
SearchBookActivity
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchBookActivity" />
</activity>
<activity android:name=".SearchBookActivity">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
</application>
答案 0 :(得分:1)
我会在我希望集中搜索功能的同一活动中同时使用两个<meta-data>
标记。虽然您可以拥有多个支持搜索的活动。 Material Design应用程序显示,只有一个搜索UI,片段或活动,是更有效的应用程序生产实践。
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchBookActivity" />
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
每日案例是搜索数据集合中的数据集合。网格,列表等
每次启动Intent with action Search时,您的应用中只能有一个搜索活动。这意味着来自您的应用和其他人。例如,应该为您的活动添加权限,确保其他应用无法使用,除非是其功能。
<meta-data
android:name="android.app.default_searchable"
android:value=".ui.activity.SearchBookActivity" />
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
当启动与android.intent.action.SEARCH
的Intent时,上面的代码将带来SearchBookActivity。那么你应该已经显示了将获得焦点的搜索视图布局。
另一种实现方式是使用不需要侦听SEARCH操作或定义任何默认搜索活动或权限的Fragment。
许多应用不需要此类功能,并且使用支持在ListView
或RecyclerView
中搜索的ListFragments。
无论哪种方式,无论您使用活动还是片段,都需要对菜单进行充气:
//来自片段
@Override
public void onCreateOptionsMenu(final Menu menu, MenuInflater inflater )
{
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_search, menu);
}
//来自活动使用活动中的public boolean onCreateOptionsMenu(Menu menu)
使用menu_search.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/search"
android:title="@string/search_label"
android:icon="@drawable/ic_actionbar_search"
app:actionViewClass="android.widget.SearchView"
android:actionViewClass="android.widget.SearchView"
app:showAsAction="always"/>
</menu>
最后但并非最不重要。您可以从MainActivity中删除此代码。在主要活动中,您只需要一个带有搜索图标的菜单项。
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
希望您实施搜索!!查看材料设计。