选项卡选择器不适用于 viewpager 和 SlidingTabLayout 的上一次点击
Tab Selector is not working on previous click with viewpager and SlidingTabLayout
我正在尝试使用 SlidingTabLayout 实现 viewpager。向前单击与选项卡选择器一起使用。但是以前的点击不起作用。它只是显示上一个选择的选项卡。我已经提到了论坛上提出的类似问题。提供的解决方案对我不起作用。我试图让它从过去 3 天开始工作,但没有任何成功。
gradle file:-
compile 'com.android.support:appcompat-v7:21.0.3'
compile "com.android.support:support-v4:21.+"
代码片段:-
ViewPagerAdapter.java
public class ViewPagerAdapter extends FragmentPagerAdapter {
final int PAGE_COUNT =8;
private String titles[] ;
public ViewPagerAdapter(FragmentManager fm, String[] titles2) {
super(fm);
titles=titles2;
}
@Override
public Fragment getItem(int position) {
switch (position) {
// Open FragmentTab1.java
case 0:
return SampleFragment.newInstance(position);
case 1:
return SampleFragment.newInstance(position);
case 2:
return SampleFragment.newInstance(position);
case 3:
return SampleFragment.newInstance(position);
case 4:
return SampleFragment.newInstance(position);
case 5:
return SampleFragment.newInstance(position);
case 6:
return SampleFragment.newInstance(position);
case 7:
return SampleFragment.newInstance(position);
}
return null;
}
public CharSequence getPageTitle(int position) {
return titles[position];
}
@Override
public int getCount() {
return PAGE_COUNT;
}
}
SampleFragment.java
public class SampleFragment extends Fragment {
private GridView mGridView;
private static final String ARG_POSITION = "position";
private int position;
public static SampleFragment newInstance(int position) {
SampleFragment f = new SampleFragment();
Bundle b = new Bundle();
b.putInt(ARG_POSITION, position);
f.setArguments(b);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
position = getArguments().getInt(ARG_POSITION);
switch (position) {
case 0:
case 1:
Log.e("SampleFragment", "0");
getActivity().getSupportFragmentManager().beginTransaction().replace( R.id.container, GalleryFragment.getInstance(position) ).commit();
break;
case 2:
getActivity().getSupportFragmentManager().beginTransaction().replace( R.id.container, TextTutorialFragment.getInstance(position) ).commit();
Log.e("SampleFragment", "2");
break;
case 3:
Log.e("SampleFragment", "3");
break;
case 4:
Log.e("SampleFragment", "4");
break;
case 5:
Log.e("SampleFragment", "5");
break;
}
//return rootView;
return null;
}
}
MainActivity.java
ViewPager pager;
private String titles[] = new String[]{"Tab1", "Tab2", "Tab3", "Tab4"
, "Tab5", "Tab6", "Tab7", "Tab8"};
SlidingTabLayout slidingTabLayout;
pager = (ViewPager) findViewById(R.id.viewpager);
slidingTabLayout = (SlidingTabLayout) findViewById(R.id.sliding_tabs);
pager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager(), titles));
slidingTabLayout.setViewPager(pager);
slidingTabLayout.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
@Override
public int getIndicatorColor(int position) {
return Color.WHITE;
}
});
Activity_Main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:background="?attr/colorPrimary"
android:minHeight="?android:attr/actionBarSize" />
<com.invensini.UTL.views.SlidingTabLayout
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimaryDark"
android:paddingLeft="20dp"
android:paddingRight="20dp" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1"
android:background="@android:color/white"
/>
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.invensini.UTL.views.DrawerNavigationListView
android:id="@+id/drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white"/>
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
当我在点击 tab2 后点击 Tab1 时,我在 android 监视器中看到以下日志:-
11-15 10:19:09.751 339-415/? W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client
11-15 10:19:11.141 339-415/? W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client
我正在使用以下示例中的代码:-
https://github.com/tekinarslan/AndroidMaterialDesignToolbar
请帮忙。
pager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager(), titles));
page.setOnPageChangeListener(new OnPageChangeListener(){})
slidingTabLayout.setViewPager(pager);
感谢 tiny Sunlight 它起作用了。你是救世主。为了解决这个问题,我工作了三天。
setOnPageChangeListener 已弃用,所以我按以下方式使用 addOnPageChangeListener。
代码片段:-
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if (position == 0) {
getSupportFragmentManager().beginTransaction().replace( R.id.container, Fragment1.getInstance(position) ).commit();
}else if (position == 1){
getSupportFragmentManager().beginTransaction().replace( R.id.container, Fragment2.getInstance(position) ).commit();
}else if (position == 2) {
getSupportFragmentManager().beginTransaction().replace( R.id.container, Fragment3.getInstance().commit();
}
else{
getSupportFragmentManager().beginTransaction().replace( R.id.container, DefaultFragment.getInstance().commit();
}
Log.e("Main Activity", "onPageSelected"+ position);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
Log.e("Main Activity", "onPageScrolled"+ position);
}
@Override
public void onPageScrollStateChanged(int state) {
Log.e("Main Activity", "onPageScrollStateChanged"+ state);
}
});
我正在尝试使用 SlidingTabLayout 实现 viewpager。向前单击与选项卡选择器一起使用。但是以前的点击不起作用。它只是显示上一个选择的选项卡。我已经提到了论坛上提出的类似问题。提供的解决方案对我不起作用。我试图让它从过去 3 天开始工作,但没有任何成功。
gradle file:-
compile 'com.android.support:appcompat-v7:21.0.3'
compile "com.android.support:support-v4:21.+"
代码片段:-
ViewPagerAdapter.java
public class ViewPagerAdapter extends FragmentPagerAdapter {
final int PAGE_COUNT =8;
private String titles[] ;
public ViewPagerAdapter(FragmentManager fm, String[] titles2) {
super(fm);
titles=titles2;
}
@Override
public Fragment getItem(int position) {
switch (position) {
// Open FragmentTab1.java
case 0:
return SampleFragment.newInstance(position);
case 1:
return SampleFragment.newInstance(position);
case 2:
return SampleFragment.newInstance(position);
case 3:
return SampleFragment.newInstance(position);
case 4:
return SampleFragment.newInstance(position);
case 5:
return SampleFragment.newInstance(position);
case 6:
return SampleFragment.newInstance(position);
case 7:
return SampleFragment.newInstance(position);
}
return null;
}
public CharSequence getPageTitle(int position) {
return titles[position];
}
@Override
public int getCount() {
return PAGE_COUNT;
}
}
SampleFragment.java
public class SampleFragment extends Fragment {
private GridView mGridView;
private static final String ARG_POSITION = "position";
private int position;
public static SampleFragment newInstance(int position) {
SampleFragment f = new SampleFragment();
Bundle b = new Bundle();
b.putInt(ARG_POSITION, position);
f.setArguments(b);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
position = getArguments().getInt(ARG_POSITION);
switch (position) {
case 0:
case 1:
Log.e("SampleFragment", "0");
getActivity().getSupportFragmentManager().beginTransaction().replace( R.id.container, GalleryFragment.getInstance(position) ).commit();
break;
case 2:
getActivity().getSupportFragmentManager().beginTransaction().replace( R.id.container, TextTutorialFragment.getInstance(position) ).commit();
Log.e("SampleFragment", "2");
break;
case 3:
Log.e("SampleFragment", "3");
break;
case 4:
Log.e("SampleFragment", "4");
break;
case 5:
Log.e("SampleFragment", "5");
break;
}
//return rootView;
return null;
}
}
MainActivity.java
ViewPager pager;
private String titles[] = new String[]{"Tab1", "Tab2", "Tab3", "Tab4"
, "Tab5", "Tab6", "Tab7", "Tab8"};
SlidingTabLayout slidingTabLayout;
pager = (ViewPager) findViewById(R.id.viewpager);
slidingTabLayout = (SlidingTabLayout) findViewById(R.id.sliding_tabs);
pager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager(), titles));
slidingTabLayout.setViewPager(pager);
slidingTabLayout.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
@Override
public int getIndicatorColor(int position) {
return Color.WHITE;
}
});
Activity_Main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:background="?attr/colorPrimary"
android:minHeight="?android:attr/actionBarSize" />
<com.invensini.UTL.views.SlidingTabLayout
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimaryDark"
android:paddingLeft="20dp"
android:paddingRight="20dp" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1"
android:background="@android:color/white"
/>
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.invensini.UTL.views.DrawerNavigationListView
android:id="@+id/drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white"/>
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
当我在点击 tab2 后点击 Tab1 时,我在 android 监视器中看到以下日志:-
11-15 10:19:09.751 339-415/? W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client
11-15 10:19:11.141 339-415/? W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client
我正在使用以下示例中的代码:-
https://github.com/tekinarslan/AndroidMaterialDesignToolbar
请帮忙。
pager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager(), titles));
page.setOnPageChangeListener(new OnPageChangeListener(){})
slidingTabLayout.setViewPager(pager);
感谢 tiny Sunlight 它起作用了。你是救世主。为了解决这个问题,我工作了三天。
setOnPageChangeListener 已弃用,所以我按以下方式使用 addOnPageChangeListener。
代码片段:-
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if (position == 0) {
getSupportFragmentManager().beginTransaction().replace( R.id.container, Fragment1.getInstance(position) ).commit();
}else if (position == 1){
getSupportFragmentManager().beginTransaction().replace( R.id.container, Fragment2.getInstance(position) ).commit();
}else if (position == 2) {
getSupportFragmentManager().beginTransaction().replace( R.id.container, Fragment3.getInstance().commit();
}
else{
getSupportFragmentManager().beginTransaction().replace( R.id.container, DefaultFragment.getInstance().commit();
}
Log.e("Main Activity", "onPageSelected"+ position);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
Log.e("Main Activity", "onPageScrolled"+ position);
}
@Override
public void onPageScrollStateChanged(int state) {
Log.e("Main Activity", "onPageScrollStateChanged"+ state);
}
});