Как сохранить состояние у listView?

536
06 февраля 2017, 15:34

Есть 3 таба для навигации, в каждом табе фрагмент, во фрагменте listview.

При навигации по табам, пропадает весь листвью со всеми данными. Если же перезагружать адаптер

listView.setAdapter(adapter);

То состояние листвью не теряется после навигации.

MainActivity

 private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new MyAudioFragment(), "1 tab");
        adapter.addFragment(new TopAudioFragment(), "2 tab");
        adapter.addFragment(new SearchAudioFragment(), "3 tab");
        viewPager.setAdapter(adapter);
    }
    public void displayInterstitial() {
        if (mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
        }
    }
    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();
        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }
        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }
        @Override
        public int getCount() {
            return mFragmentList.size();
        }
        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }
        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }

MyAudioFragment

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_my, container, false);
        listView = (ListView)view.findViewById(R.id.listView);
        player =  ((Application)getActivity().getApplication()).getPlayer();
        state = listView.onSaveInstanceState();
        listView.setOnScrollListener(new AbsListView.OnScrollListener() {
            public void onScrollStateChanged(AbsListView view, int scrollState) {

            }
            public void onScroll(AbsListView view, int firstVisibleItem,
                                 int visibleItemCount, int totalItemCount) {
                if(firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0)
                {
                    if(flag_loading == false)
                    {
                        flag_loading = true;
                        LocalOffset += 30;
                        try {
                            loadAudioList(LocalOffset);
                        }catch (IOException e){
                        }
                    }
                }
            }
        });
        try {
           /* if(adapter != null)
                listView.setAdapter(adapter);*/
            loadAudioList(LocalOffset);
        }catch (IOException e){
        }

        return view;
    }

private void loadAudioList(int offset) throws IOException{
        wrapper.MyAudio(offset, UserStorage.getUid(), new WrapperVK.WrapperVKActionsAudio() {
            @Override
            public void onSuccess(ArrayList data) {
                final ArrayList dataToUiThread = data;
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                      if(adapter == null) {
                            adapter = new AudioAdapter(getActivity(), dataToUiThread);
                            listView.setAdapter(adapter);
                        }else {
                            adapter.addAll(dataToUiThread);
                            adapter.notifyDataSetChanged();
                            flag_loading = false;
                        }
                    }
                });
            }
            @Override
            public void onFail(String data) {
                System.out.println(data);
            }
            @Override
            public void onError(Exception e) {
                System.out.println(e.toString());
            }
        });
    }

Как правильно сохранить состояние каждого listView?

READ ALSO
Выбор папки в java

Выбор папки в java

У меня простой вопрос: Как реализовать выбор папки в java?

437
Nullpointer при доступе к члену внешнего класса из внутреннего расширенного

Nullpointer при доступе к члену внешнего класса из внутреннего расширенного

Здравствуйте, имеется следующая конструкция:

417
Uri.getPath(); возвращает вместо картинки /document/image/156

Uri.getPath(); возвращает вместо картинки /document/image/156

Помогите, а то ничего не поймуОжидаю, что путь должен быть /document/image/picture

431