Я создаю 2 фрагмента FragmentSearchList & FragmentMain в моем проекте.Код FragmentSearchList.onCreateView
View view_searchlist;
ArrayList<String> arrayList_searchlist;
ArrayAdapter<String> adapter_searchlist;
ListView listView_searchlist;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view_searchlist = inflater.inflate(R.layout.search_listview_fragment,container,false);
//Create listview
listView_searchlist = (ListView) view_searchlist.findViewById(R.id.search_list_view);
arrayList_searchlist = new ArrayList<>();
arrayList_searchlist.addAll(Arrays.asList(getResources().getStringArray(R.array.array_search_mrecords)));
adapter_searchlist = new ArrayAdapter<>(container.getContext(), android.R.layout.simple_list_item_1,arrayList_searchlist);
listView_searchlist.setAdapter(adapter_searchlist);
return view_searchlist;
}
Код в Activity разрешает переключение фрагментов Actived
//Switch Fragment
public void FragmentSwitch(android.support.v4.app.Fragment fragment, String fragment_name) {
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.liner_holder_fragment_mrecords, fragment, fragment_name);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
Код в FragmentSearchList позволяет изменять отображение Arraylist при вызове.
public void ArrayListSwitch () {
if (arrayList_searchlist != null && adapter_searchlist != null) {
arrayList_searchlist.clear();
arrayList_searchlist.addAll(Arrays.asList(getResources().getStringArray(R.array.array_search_mrecords_change)));
adapter_searchlist.notifyDataSetChanged();
}
}
Iпопробуйте использовать эту функцию через событие onQueryTextChange.Это уже работает.
@Override
public boolean onQueryTextChange(String newText) {
if (fragment_searchlist != null && fragment_searchlist.isVisible())
//it work ok!!
fragment_searchlist.ArrayListSwitch();
return false;
}
Но когда я использую этот код при переключении фрагмента.Это не работает.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.bt_search_mrecords:
//create searchview when first access. switch from next time.
if (fragment_mrecords != null && fragment_mrecords.isVisible()) {
if (fragment_searchlist != null){
fragment_searchlist = (FragmentSearchList) getSupportFragmentManager().findFragmentByTag("fragment_searchlist");
}
else {
fragment_searchlist = new FragmentSearchList();
}
//Not work
fragment_searchlist.ArrayListSwitch();
FragmentSwitch(fragment_searchlist, "fragment_searchlist");
}
return true;
}
return super.onOptionsItemSelected(item);
}
Или
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.bt_search_mrecords:
//create searchview when first access. switch from next time.
if (fragment_mrecords != null && fragment_mrecords.isVisible()) {
if (fragment_searchlist != null){
fragment_searchlist = (FragmentSearchList) getSupportFragmentManager().findFragmentByTag("fragment_searchlist");
}
else {
fragment_searchlist = new FragmentSearchList();
}
FragmentSwitch(fragment_searchlist, "fragment_searchlist");
//Not work
fragment_searchlist.ArrayListSwitch();
}
return true;
}
return super.onOptionsItemSelected(item);
}
Я не знаю, где я поступил неправильно.Нужна ваша помощь.