Реализация скользящих вкладок во фрагменте ящика

Просто нужен обходной путь!

Я уже реализовал ящик, теперь нужно разместить скользящие вкладки в одном из этих фрагментов.

Класс фрагмента:

import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragmentTwo extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_two, container, false);
}
}

Метод, который я использую, должен расширить тот же класс «FragmentTwo» до «ActionBarActivity». Вот код:

public class FragmentTwo extends ActionBarActivity {

// Declaring Your View and Variables

Toolbar toolbar;
ViewPager pager;
ViewPagerAdapter adapter;
SlidingTabLayout tabs;
CharSequence Titles[] = {“Test1”, “Test2”, “Test3”};
int Numboftabs = 3;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Creating The Toolbar and setting it as the Toolbar for the activity

toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);

// Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs.
adapter = new ViewPagerAdapter(getSupportFragmentManager(), Titles, Numboftabs);

// Assigning ViewPager View and setting the adapter
pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(adapter);

// Assiging the Sliding Tab Layout View
tabs = (SlidingTabLayout) findViewById(R.id.tabs);
tabs.setDistributeEvenly(true); // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width

// Setting Custom Color for the Scroll bar indicator of the Tab View
tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
@Override
public int getIndicatorColor(int position) {
return getResources().getColor(R.color.tabsScrollColor);
}
});

// Setting the ViewPager For the SlidingTabsLayout
tabs.setViewPager(pager);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}

Я знаю, что класс не может быть расширен более чем на один класс в java. Но есть ли другой способ сделать это?


person Himanshu Shrivastava    schedule 21.11.2015    source источник


Ответы (1)


Размещение ViewPager внутри Fragment, созданного NavigationDrawer, аналогично размещению ViewPager внутри простого фрагмента, созданного внутри Activity.

Внутри класса Fragment два реализуют ViewPager следующим образом:

public class FragmentTwo extends Fragment {
        private ViewPager pager;
        private ViewPagerAdapter adapter;
        private SlidingTabLayout tabs;
        private static CharSequence titles[];
        private final int numOfTabs = 3;

    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

            View rootView = inflater.inflate(R.layout.fragment_slidetab, container, false);

    // set your titles here
            adapter =  new ViewPagerAdapter(getActivity().getSupportFragmentManager(),titles, numOfTabs);

            pager = (ViewPager) rootView.findViewById(R.id.pager);
            pager.setAdapter(adapter);

            tabs = (SlidingTabLayout) rootView.findViewById(R.id.tabs);
            tabs.setDistributeEvenly(true); // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width

            tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
                @Override
                public int getIndicatorColor(int position) {
                    return getResources().getColor(R.color.tabsScrollColor);
                }
            });

            tabs.setViewPager(pager);

            //mSwipeRefreshLayout = (SwipeRefreshLayout) layout.findViewById(R.id.swipeRefreshLayout);

            return rootView;
        }
    }

Для ViewPager вам нужен класс Adapter:

 public class ViewPagerAdapter extends FragmentStatePagerAdapter {

        CharSequence Titles[];
        int NumbOfTabs;

        public ViewPagerAdapter(FragmentManager fm,CharSequence mTitles[], int mNumbOfTabsumb) {
            super(fm);

            this.Titles = mTitles;
            this.NumbOfTabs = mNumbOfTabsumb;

        }

        @Override
        public Fragment getItem(int position) {

            if(position == 0)
            {
                FragmentForDay tab1 = FragmentSlide.newInstance(0);
                return tab1;
            }
            else if(position == 1)
            {
                FragmentSlide tab2 = FragmentSlide.newInstance(1);
                return tab2;
            }
            else
            {
                FragmentSlide tab3 = FragmentSlide.newInstance(2);
                return tab3;
            }

        }

    @Override
    public CharSequence getPageTitle(int position) {
        return Titles[position];
    }

    @Override
    public int getCount() {
        return NumbOfTabs;
    }
    }

И каждая из ваших вкладок слайдов, называемая здесь FragmentSlide, может быть раздута как обычный фрагмент:

   public class FragmentSlide extends Fragment {

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

                // Inflate the layout for this fragment
                return rootView;
            }

  public static FragmentSlide newInstance(int selectedIdForIndex) {
        FragmentSlide fragment = new FragmentSlide();

        Bundle args = new Bundle();
        args.putInt(ARG_LAYOUT_ID, selectedIdForIndex);
        fragment.setArguments(args);

        return fragment;
        }
  }
person jublikon    schedule 21.11.2015