Android:将信息从活动发送到片段

时间:2015-08-11 21:33:28

标签: android android-fragments android-actionbar

在我的MainActivity中,我的操作栏/工具栏/菜单上有一个活动的搜索按钮。我想知道是否有办法过滤活动搜索的片段表单中的列表?提前谢谢!

如果每个片段(它们位于带有标签的viewpager +操作栏中)可以拥有自己的操作栏,那就更好了!

2 个答案:

答案 0 :(得分:1)

您应该为活动的视图寻呼机

创建自定义适配器

然后显示来自适配器的片段,现在您有两个选择用于您的目的:

  1. 为其中的每个片段定义自定义工具栏自己的布局(.xml)文件,然后使用它或
  2. 将数据从活动传递到片段适配器,从片段适配器传递到您的目的片段并进行过滤。
  3. 祝你好运我的朋友

答案 1 :(得分:1)

如果您不想使用系统服务实现搜索described in docs,那么一种方法如下:

  1. 在onCreate方法中获取片段的句柄

    // if you fragment is embedded with <fragment tag>
    mMySearchFragment = (MySearchfragment)getFragmentManager()
        .findFragmentById(R.id.your_fragment) 
    
    //in case your fragment is added programmatically then, of course,
    getFragmentManager()
    .beginTransaction()
    .add(fragmentid, gragmentinstance, TAG)
    .commit();
    
  2. 在onCreateOptionsMenu中执行类似

    的操作
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_searching, menu);
        mSearchView = (SearchView) menu.findItem(R.id.menu_search_message).getActionView();
    
        mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
            @Override
            public boolean onQueryTextSubmit(String query) {handleSearch(query)}
    
            @Override
            public boolean onQueryTextChange(String newText) { ... }
        });
    
        return true;
    }
    
  3. 最后

    private void handleSearch(String query){
        if(mMySearchFragment != null){
            mMySearchFragment.updateSearchResults(query);
        }
    }
    
  4. 您的片段需要有一个公共方法updateSearchResults(String query),您可以在其中运行搜索并使用新集合更新列表视图的适配器

  5. 此外,您可以在Studio中导入BasicContactables示例(文件 - &gt;导入示例)并调查代码