您好我正在尝试在多个片段上实现搜索功能,但我只能让它只在一个片段上工作。我做了什么? 在我的每个片段上,我都有这行代码
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;
}
我一次只能使用一个。并且用户必须(在这种情况下现在)在自行车片段上。但我想要一种情况,即无论用户使用什么片段,它都能够从不同的片段中获取搜索查询。提前谢谢。
答案 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