在多个片段上搜索查询

时间:2016-02-04 02:37:06

标签: android android-fragments android-search

您好我正在尝试在多个片段上实现搜索功能,但我只能让它只在一个片段上工作。我做了什么? 在我的每个片段上,我都有这行代码

 public void bindData(String strSearchText) {
   // This method its array from Resources. and its different from fragment to fragment 
   Object[] arrayItems = getResources().getStringArray(R.array.BikeList);
   if (strSearchText != null && strSearchText.length() > 0) {
    List<Object> lstFilteredItems = new ArrayList<>();
    for (Object item : arrayItems) {
        if (((String)item).contains(strSearchText)) {
            lstFilteredItems.add(item);
        }
    }
    arrayItems = lstFilteredItems.toArray();
}
ArrayAdapter<Object> adapter = new ArrayAdapter<>(getActivity(),R.layout.fragment_sub_list,R.id.topText,arrayItems);    
setListAdapter(adapter);
getListView().setOnItemClickListener(this);
}

在我的主要活动中,我有这段代码。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.home_page, menu);
    SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE);
    searchView = (SearchView) menu.findItem(R.id.search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(
            new ComponentName(getApplicationContext(), SearchResultActivity.class)));
    searchView.setOnQueryTextListener(this);
    return true;
}


@Override
public boolean onQueryTextSubmit(String query) {
    return false;
}

@Override
public boolean onQueryTextChange(String strSearchText) {
    //how do i switch between them? based on whatever fragment the user is
    bikeSublist.bindData(strSearchText); //bikefragment  
    //carSublist.bindData(strSearchText);//carfragment

    return true;
}

我一次只能使用一个。并且用户必须(在这种情况下现在)在自行车片段上。但我想要一种情况,即无论用户使用什么片段,它都能够从不同的片段中获取搜索查询。提前谢谢。

2 个答案:

答案 0 :(得分:1)

如何制作在每个片段中实现的界面。

public interface SearchData {
    void bindData(String strSearchText);
}

然后在您的onQueryTextChange(String strSearchText)方法中,检查当前显示的片段是否存在,并使用该方法(如果是这种情况)。

@Override
public boolean onQueryTextChange(String strSearchText) {
    Fragment currentFragment = getActivity().getFragmentManager().findFragmentById(R.id.fragment_container);
    if (currentFragment  instanceof SearchData )
    {
        currentFragment.bindData(strSearchText);
    }
}

答案 1 :(得分:0)

在公共场所收集getResources().getStringArray(R.array.BikeList);等所有资源并用于搜索。您想要搜索的元素来自&#39;资源&#39;然后你可以在一个公共访问地点收集它。

例如:

使用static列表&lt; E>持有所有resources