package com.marshalchen.common.demoofui.observablescrollview; import android.app.Activity; import android.os.Build; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.widget.ArrayAdapter; import com.github.ksoichiro.android.observablescrollview.ObservableListView; import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCallbacks; import com.marshalchen.common.demoofui.R; import java.util.ArrayList; import java.util.List; public class ViewPagerTabListViewFragment extends Fragment { public static final String ARG_INITIAL_POSITION = "ARG_INITIAL_POSITION"; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.observable_scroll_view_fragment_listview, container, false); Activity parentActivity = getActivity(); final ObservableListView listView = (ObservableListView) view.findViewById(R.id.list); listView.addHeaderView(inflater.inflate(R.layout.observable_scroll_view_padding, null)); List<String> items = new ArrayList<String>(); for (int i = 1; i <= 100; i++) { items.add("Item " + i); } listView.setAdapter(new ArrayAdapter<String>(parentActivity, android.R.layout.simple_list_item_1, items)); if (parentActivity instanceof ObservableScrollViewCallbacks) { // Scroll to the specified position after layout Bundle args = getArguments(); if (args != null && args.containsKey(ARG_INITIAL_POSITION)) { final int initialPosition = args.getInt(ARG_INITIAL_POSITION, 0); ViewTreeObserver vto = listView.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { listView.getViewTreeObserver().removeGlobalOnLayoutListener(this); } else { listView.getViewTreeObserver().removeOnGlobalLayoutListener(this); } // scrollTo() doesn't work, should use setSelection() listView.setSelection(initialPosition); } }); } listView.setScrollViewCallbacks((ObservableScrollViewCallbacks) parentActivity); } return view; } }