2017-04-26 18 views
1

私が他の場所から戻ってきたときにListFragmentが同じ位置に戻るようにしようとしていますが、機能しません。私のコード内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

私は、彼らが異なるそうであるように、人々のアドバイスに従うこと、それは非常に混乱探しています。

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

FragmentHerbsクラス変数としてリストビューリストビューを追加し、onCreateViewでそれを初期化する - リストビュー= getListView()。 – garmax1

+0

@ garmax1書式設定であなたの提案を表示してください – MacaronLover

答えて

-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

まだ動作しません。私がそれを返すときはいつでもリストビューのトップを表示し続けます。 – MacaronLover

関連する問題