将ActionBar搜索查询传递给片段

时间:2013-12-04 09:00:47

标签: android android-fragments android-fragmentactivity searchview

以下是我看到SHERLOCK FRAGMENT ACTIVITYFRAGMENTSSEARCH VIEWFRAGMENT SEARCH RESULTS。最后有4个片段FRAGMENT SEARCH RESULTS

我的问题是如何将搜索查询的数据从搜索视图传递到FRAGMENT SEARCH RESULTS,并在private void setupSearchView(MenuItem searchItem) { if (isAlwaysExpanded()) { mSearchView.setIconifiedByDefault(false); } else { searchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); } mSearchView.setOnQueryTextListener(this); } public boolean onClose() { return false; } protected boolean isAlwaysExpanded() { return false; } @Override public boolean onQueryTextSubmit(String query) { if (query.length() > 0) { **//WHAT SHOULD I WRITE HERE** } return false; } @Override public boolean onQueryTextChange(String newText) { return false; }

中显示搜索结果

我实现了这个

{{1}}

3 个答案:

答案 0 :(得分:1)

这里有一个很好的例子action-bar-search-view

要显示搜索结果,您需要传递submitYourQuery(query);并在成功搜索时返回true。

  

存储和搜索数据的过程对您的应用程序而言是独一无二的。您可以通过多种方式存储和搜索数据。根据您的需求和数据格式,您应该仔细考虑存储和搜索数据。

从Android文档ReceivingTheQuery

获取更多详细信息

答案 1 :(得分:1)

@Override
    public boolean onQueryTextSubmit(String query) {
        if (query.length() > 0) {
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            Fragment newFragment = new SearchFragment(); //your search fragment
            Bundle args = new Bundle();
            args.putString("query_string", query);
            newFragment.setArguments(args);

            transaction.replace(R.id.content_frame, newFragment);
            transaction.addToBackStack(null);
            transaction.commit();   
        }
        return false;
    }

答案 2 :(得分:0)

我找到了一种解决方法,您可以在BaseActivity中覆盖此方法(startActivity(Intent)),然后检查操作是否为ACTION_SEARCH,然后执行您的特殊工作

@Override
    public void startActivity(Intent intent) {
        try {
            if (intent.getAction().equals(Intent.ACTION_SEARCH))
                // Do ur job here start fragment for Example

             return;
        } catch (Exception e) {

        }
        super.startActivity(intent);
    }