ListView没有返回到精确滚动位置

时间:2017-04-26 19:19:02

标签: java android xml listview android-listfragment

当我从其他地方返回时,我试图让我的ListFragment返回到完全相同的位置,但它不起作用。我的代码中listView的所有实例都变为红色,并返回以下错误:

  

无法解析符号' listView'

当我使用ListView listView = getListView();时,我真的不知道为什么会这样。我甚至尝试过这些页面中的解决方案:

  1. FutureStudio.io - How to Save and Restore the Scroll Position and State of a Android ListView
  2. Stack Overflow - Eugene Mymrin's answer - Maintain/Save/Restore scroll position when returning to a ListView
  3. 我发现跟随人们的建议很困惑,因为他们确实有所不同。

    XML

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:id="@+id/fragmentherbs">
    
        <ListView
            android:id="@android:id/list"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </ListView>
    
    </LinearLayout>
    

    爪哇

    public class FragmentHerbs extends ListFragment {
    
        public FragmentHerbs() {
            // Required empty constructor
        }
    
        public static FragmentHerbs newInstance() {
            return new FragmentHerbs();
        }
    
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_herbs, container, false);
    
            ListView listView = getListView();
    
            initialize();
            return view;
        }
    
        List<Herb> list = new ArrayList<>();
        private void initialize() {
            String[] items = getActivity().getResources().getStringArray(R.array.herb_names);
            for (int n = 0; n < items.length; n++){
                Herb herb = new Herb();
                herb.setID();
                herb.setName(items[n]);
                list.add(herb);
            }
    
            HerbsListAdapter mAdapter = new HerbsListAdapter(list, getActivity());
            setListAdapter(mAdapter);
        }
    
    
        @Override
        public void onPause() {
            // Save ListView state @ onPause
            Log.d(TAG, "saving listview state @ onPause");
            state = listView.onSaveInstanceState();
            super.onPause();
        }
    
        @Override
        public void onViewCreated(final View view, Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
    
            // Restore previous state (including selected item index and scroll position)
            if(state != null) {
                Log.d(TAG, "trying to restore listview state..");
                listView.onRestoreInstanceState(state);
            }
        }
    }
    

1 个答案:

答案 0 :(得分:-1)

public class FragmentHerbs extends ListFragment {
   ListView listView;

   public FragmentHerbs() {
       // Required empty constructor
   }

   public static FragmentHerbs newInstance() {
       return new FragmentHerbs();
   }

   @Nullable
   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       View view = inflater.inflate(R.layout.fragment_herbs, container, false);

       listView = getListView();
       initialize();
       return view;
   }

   List<Herb> list = new ArrayList<>();
   private void initialize() {
      String[] items = getActivity().getResources().getStringArray(R.array.herb_names);
      for (int n = 0; n < items.length; n++){
         Herb herb = new Herb();
         herb.setID();
         herb.setName(items[n]);
         list.add(herb);
      }

      HerbsListAdapter mAdapter = new HerbsListAdapter(list, getActivity());
      setListAdapter(mAdapter);
   }


   @Override
   public void onPause() {
       // Save ListView state @ onPause
       Log.d(TAG, "saving listview state @ onPause");
       state = listView.onSaveInstanceState();
       super.onPause();
   }

   @Override
   public void onViewCreated(final View view, Bundle savedInstanceState) {
       super.onViewCreated(view, savedInstanceState);

       // Restore previous state (including selected item index and scroll position)
       if(state != null) {
          Log.d(TAG, "trying to restore listview state..");
          listView.onRestoreInstanceState(state);
       }
   }

}