4

I am making an android application with tabbed layout and with tab bar. In my mainActivity i have put a bottom sheet as i want access to it on all 3 tabs in my main activity. The problem occurs in bottom sheet layout. i want to be able to have 3 tabs inside my bottom sheet too. i am able to get view pager in my bottom sheet with tab bar for clicking and swiping to switch tabs. But the problem is that the whole bottom sheet layout is scrolling vertically too.

I have essentially made a parent fragment which contains a toolbar and a view pager. And have put that fragment in bottom sheet. The horizontal scrolling works fine i.e. in my bottom sheet if i swipe left or right i am able to switch tabs , but the problem is that all that is vertically scrollable i.e. if i scroll upwards it appears as if my whole fragment containing viewpager in bottom sheet is scrolling upwards and its infinitely scrollable upwards. i dont want that.

Here's the code

mainActivity.xml

<?xml version="1.0" encoding="utf-8"?>      <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false"
tools:context="com.example.ansh.beatsmusic.MainActivity">
<LinearLayout
    android:id="@+id/test"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="50dp"
    android:weightSum="1">
    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/appbar_padding_top"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/AppTheme.PopupOverlay">

        </android.support.v7.widget.Toolbar>

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:layout_weight="1" />
</LinearLayout>

<android.support.v4.widget.NestedScrollView
    android:id="@+id/bottom_sheet"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="true"
    android:background="@android:color/holo_orange_light"
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
    app:behavior_hideable="false"
    app:behavior_peekHeight="50dp"
    app:elevation="3dp"
    >
    <fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.example.ansh.beatsmusic.Music_player_parent"/>

</android.support.v4.widget.NestedScrollView </android.support.design.widget.CoordinatorLayout>

my parent fragment which goes inside bottom sheet

<?xml version="1.0" encoding="utf-8"?><android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false"
android:nestedScrollingEnabled="false"
tools:context="com.example.ansh.beatsmusic.Music_player_parent">
    <android.support.design.widget.AppBarLayout
        android:id="@+id/my_appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/appbar_padding_top"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/my_toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/AppTheme.PopupOverlay">

        </android.support.v7.widget.Toolbar>

        <android.support.design.widget.TabLayout
            android:id="@+id/my_tab_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/my_viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:layout_weight="1 </android.support.design.widget.CoordinatorLayout>

My mainActivity.java is left untouched i.e. i have not altered anything its same as the android studio creates by default when creating a tabbed activity

this is my parent fragment.java

public class Music_player_parent extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";

// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;

// my stuff
private TabLayout tblayout;
private ViewPager vpager;
private ViewPagerAdapterMusicParent adapter;

public Music_player_parent() {
    // Required empty public constructor
}

/**
 * Use this factory method to create a new instance of
 * this fragment using the provided parameters.
 *
 * @param param1 Parameter 1.
 * @param param2 Parameter 2.
 * @return A new instance of fragment Music_player_parent.
 */
// TODO: Rename and change types and number of parameters
public static Music_player_parent newInstance(String param1, String param2) {
    Music_player_parent fragment = new Music_player_parent();
    Bundle args = new Bundle();
    args.putString(ARG_PARAM1, param1);
    args.putString(ARG_PARAM2, param2);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment_music_player_parent,container,false);
    vpager=(ViewPager) view.findViewById(R.id.my_viewpager);
    tblayout=(TabLayout) view.findViewById(R.id.my_tab_layout);
    adapter=new ViewPagerAdapterMusicParent(getChildFragmentManager(),getActivity(),vpager,tblayout);
    vpager.setAdapter(adapter);
    tblayout.setupWithViewPager(vpager);
    return view;
}}

And this is my page adapter for the view pager in parent fragment

ublic class ViewPagerAdapterMusicParent extends FragmentPagerAdapter {
private ViewPager viewPager;
private TabLayout tabLayout;
private Context context;
public ViewPagerAdapterMusicParent(FragmentManager fm,Context c,ViewPager vp,TabLayout tb){
    super(fm);
    context=c;
    viewPager=vp;
    tabLayout=tb;
}
@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            return PlaceholderFragment.newInstance(1);
        case 1:
            return PlaceholderFragment.newInstance(2);
        case 2:
            return PlaceholderFragment.newInstance(3);
    }
    return PlaceholderFragment.newInstance(position + 1);
}

@Override
public int getCount() {
    return 3;
}
public CharSequence getPageTitle(int position) {
    switch (position) {
        case 0:
            return "SECTION 1";
        case 1:
            return "SECTION 2";
        case 2:
            return "SECTION 3";
    }
    return null;
}}

I already tried putting things in linear layout in my parent fragment one by one i.e. first i put the whole cordinator layout in linear layout then tried putting everything inside cordinator layout in a linear layout. This removed any kind of scrolling vertical as well as horrizontal i wasnt able to see the child fragment of view pager i.e. i was not able to see text from placeholderfragment

Ansh Sahajpal
  • 69
  • 2
  • 7
  • 2
    I quite possibly gave an answer to your question [here](http://stackoverflow.com/a/38281457/6507689) and [here](http://stackoverflow.com/a/39400966/4744332). Both deal with ViewPagers in bottom sheets and scrolling. – laenger Nov 01 '16 at 17:07

0 Answers0