PlayNewsStandDemo icon indicating copy to clipboard operation
PlayNewsStandDemo copied to clipboard

working with both scrollview you created and listview/Recycleview

Open 1abid opened this issue 9 years ago • 0 comments

Hello , I have followed your step and it works for me .But For my project I need to work with both screllview and list for different tab . SO I cook my code with your project and https://github.com/kmshack/Android-ParallaxHeaderViewPager and this one . but your scroll view works with scroll and parallax perfectly but my listview is not giving the parallax effect . here are some major changes in my code . please suggest me what should I do to get both listview and scrollview up and running

public class PagerAdapter extends FragmentPagerAdapter  implements PagerSlidingTabStrip.IconTabProvider{

        private SparseArrayCompat<ScrollTabHolder> mScrollTabHolders;
        private SparseArrayCompat<ScrollTabRecycleView> mScrollTabHoldersRecycle;
       ..........


        public PagerAdapter(FragmentManager fm) {
            super(fm);
            mScrollTabHolders = new SparseArrayCompat<ScrollTabHolder>();
            mScrollTabHoldersRecycle = new SparseArrayCompat<ScrollTabRecycleView>();
        }

       public Fragment getItem(int position) {

            ScrollTabHolderFragment fragment;

            switch(position){



                case 0:
                    fragment = (ScrollTabHolderFragment) ScrollViewFragment.newInstance(position);
                    mScrollTabHolders.put(position, fragment);
                    if (mListener != null) {
                        fragment.setScrollTabHolder(mListener);
                    }
                    return fragment;


                case 1:
                    fragment = (ScrollTabHolderFragment) ScrollViewFragment.newInstance(position);
                    mScrollTabHolders.put(position, fragment);
                    if (mListener != null) {
                        fragment.setScrollTabHolder(mListener);
                    }
                    return fragment;

                case 2:
                    ScrollTabHolderFragmentRecycleView fragmentone = (ScrollTabHolderFragmentRecycleView) TriprontoHomeFragment.newInstance(position);
                    mScrollTabHoldersRecycle.put(position, fragmentone);
                    if (mListener != null) {
                        fragmentone.setScrollTabHolder(mListenerRecycle);
                    }
                    return fragmentone;

                   ......................................
                   ......................................
                  public SparseArrayCompat<ScrollTabHolder> getScrollTabHolders() {
            return mScrollTabHolders;
        }

        public SparseArrayCompat<ScrollTabRecycleView> getScrollTabHoldersTwo(){
            return mScrollTabHoldersRecycle;
        } 

now according to ScrollTabHolderFragment and ScrollTabHolder I have created two classes as follows


public abstract class ScrollTabHolderFragmentRecycleView extends Fragment implements ScrollTabRecycleView{

    protected ScrollTabRecycleView mScrollTabHolder;

    public void setScrollTabHolder(ScrollTabRecycleView scrollTabHolder) {
        mScrollTabHolder = scrollTabHolder;
    }


}


public interface ScrollTabRecycleView {

    void adjustScroll(int scrollHeight);

    void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount, int pagePosition);
}

and my ListFragment class I added this code but got no effect on scroll over the header view

public class TriprontoHomeFragment extends ScrollTabHolderFragmentRecycleView  {

    public static final String TAG = TriprontoHomeFragment.class.getSimpleName();

    private static final String ARG_POSITION = "position";

    private ListView mListView;
    private InterestAdapter mAdapter;

    private int mPosition;

    private View rootView;


    public static Fragment newInstance(int position) {
        TriprontoHomeFragment f = new TriprontoHomeFragment();
        Log.d(TAG, "fragment called successfully");
        Bundle b = new Bundle();
        b.putInt(ARG_POSITION, position);
        f.setArguments(b);
        return f;
    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mPosition = getArguments().getInt(ARG_POSITION);

    }


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


        mListView = (ListView) rootView.findViewById(R.id.listview);
        View placeHolderView = inflater.inflate(R.layout.view_header_placeholder, mListView, false);
        placeHolderView.setBackgroundColor(0xFFFFFFFF);
        mListView.addHeaderView(placeHolderView);

        return rootView;
    }

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


    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        mListView.setOnScrollListener(new OnScroll());
        mAdapter = new InterestAdapter(InterestManager.getInstance().getCountries(), R.layout.home_row_items, getActivity());
        mListView.setAdapter(mAdapter);

        if(MainActivity.NEEDS_PROXY){//in my moto phone(android 2.1),setOnScrollListener do not work well
            mListView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if (mScrollTabHolder != null)
                        mScrollTabHolder.onScroll(mListView, 0, 0, 0, mPosition);
                    return false;
                }
            });
        }


    }


    @Override
    public void adjustScroll(int scrollHeight) {

        if (scrollHeight == 0 && mListView.getFirstVisiblePosition() >= 1) {
            return;
        }

        mListView.setSelectionFromTop(1, scrollHeight);

    }

    public class OnScroll implements AbsListView.OnScrollListener {

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {

        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                             int visibleItemCount, int totalItemCount) {
            if (mScrollTabHolder != null)
                mScrollTabHolder.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount, mPosition);
        }

    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount, int pagePosition) {

    }
}

1abid avatar Nov 24 '15 15:11 1abid