Изменить отображение массива во фрагменте, когда кнопка активна - PullRequest
0 голосов
/ 05 октября 2018

Я создаю 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);
}

Я не знаю, где я поступил неправильно.Нужна ваша помощь.

...