2017-04-26 1 views
1

J'essaie d'obtenir que mon ListFragment revienne à la même position lorsque je reviens d'ailleurs, mais cela ne fonctionne pas. Toutes les instances de listView dans mon code deviennent rouges et l'erreur suivante est renvoyée:ListView ne revient pas à la position de défilement exacte

ne peut pas résoudre le symbole « listView »

Je ne sais vraiment pas pourquoi cela est arrivé quand je ListView listView = getListView();. J'ai même essayé suivant les solutions de ces pages:

  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

Je trouve qu'il est très déroutant de suivre les suggestions des gens comme ils varient.

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> 

Java

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); 
     } 
    } 
} 
+0

Ajouter ListView listView comme variable de classe FragmentHerbs et l'initialiser dans onCreateView - listView = getListView(); – garmax1

+0

@ garmax1 S'il vous plaît montrer votre suggestion avec mise en forme – MacaronLover

Répondre

-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); 
     } 
    } 

}

+0

ne fonctionne toujours pas. Il continue d'afficher le haut de la liste à chaque fois que j'y retourne. – MacaronLover