如何在viewpager中启用整页滑动?

时间:2014-07-31 10:19:42

标签: android android-viewpager

如何在VIewPager的屏幕中间进行滑动?就像在应用商店一样,您可以在任何地方滑动以转到下一个标签!目前,只有当我从屏幕的最右角(挡板滑动)滑动时才会发生这种情况

我的代码:

public class SwipeFragment extends Fragment {

ViewPager viewPager;
SlidingTabLayout slidingTabLayout;
ArrayList<String> tabs;    

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.swipe_fragment, container, false);
}

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

    tabs = new ArrayList<String>();
    tabs.add("Image");
    tabs.add("Something Else");
    tabs.add("Some Long Title");
    tabs.add("Songs");
    tabs.add("Off The Page!");

    viewPager = (ViewPager) view.findViewById(R.id.viewPager);
    viewPager.setAdapter(new VPAdapterHelper());

    slidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.slidingTabs);
    slidingTabLayout.setViewPager(viewPager);
}

public class VPAdapterHelper extends PagerAdapter {
    @Override
    public int getCount() {
        return tabs.size();
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        View view = getActivity().getLayoutInflater().inflate(R.layout.pager_item, container, false);
        container.addView(view);

        ListView listView = (ListView) view.findViewById(R.id.VP_ListView);
        // TODO set different adapters for different tabs
        listView.setAdapter(new AdapterHelper(context));

        return view;

    }

    @Override
    public boolean isViewFromObject(View view, Object obj) {
        return obj == view;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabs.get(position);
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }
}

swipe_fragment.xml

 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

<com.nischal.test.SlidingTabLayout
    android:id="@+id/slidingTabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<android.support.v4.view.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="0px"
    android:layout_weight="1" />

</LinearLayout>

pager_item.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">


<ListView
    android:id="@+id/VP_ListView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" />
</RelativeLayout>

我希望能够从页面的任何位置滑动到不同的标签页。 我尝试覆盖容器的DragListner并将draylistner调度到viewpage,但没有帮助!

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

找到我自己的问题的答案。问题似乎在listview项目布局中。

<?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="wrap_content"
android:paddingTop="1dip"
android:paddingBottom="1dip"
android:paddingStart="8dip"
android:paddingEnd="8dip">


<ImageView
    android:id="@+id/CL_imageView"
    android:layout_width="48dp"
    android:layout_height="48dp" />

<TextView
    android:id="@+id/CL_textView"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:ellipsize="end"
    android:gravity="center"
    android:lineSpacingMultiplier="1.2"
    android:singleLine="true"
    android:text="New Text"
    android:textSize="16sp"
    android:textStyle="bold" />
</LinearLayout>

这里,textview重力标签被设置为中心,这由于某种原因导致了整个问题。删除了重力标签并解决了问题!