Android 如何在操作栏选项卡之间平滑切换,而无需每次重新加载片段
我下面的操作栏选项卡实现方法是否有效?因为每当我在选项卡之间切换时,选项卡内容片段都会被替换并再次加载到框架布局中 我想在第一次添加片段,并在选项卡之间切换时平滑地显示片段(无需重新加载) 注意:我尝试在onCreate方法中添加所有片段。但是这些片段彼此重叠,同时在帧布局中显示所有片段 我的代码:Android 如何在操作栏选项卡之间平滑切换,而无需每次重新加载片段,android,android-ui,Android,Android Ui,我下面的操作栏选项卡实现方法是否有效?因为每当我在选项卡之间切换时,选项卡内容片段都会被替换并再次加载到框架布局中 我想在第一次添加片段,并在选项卡之间切换时平滑地显示片段(无需重新加载) 注意:我尝试在onCreate方法中添加所有片段。但是这些片段彼此重叠,同时在帧布局中显示所有片段 我的代码: public class ManageActivity extends SherlockFragmentActivity implements ActionBar.TabListener {
public class ManageActivity extends SherlockFragmentActivity implements ActionBar.TabListener {
private Activity mActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manage);
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab tab1 = getSupportActionBar().newTab();
tab1.setText("Tab1");
tab1.setTabListener(this);
getSupportActionBar().addTab(tab1);
ActionBar.Tab tab2 = getSupportActionBar().newTab();
tab2.setText("Tab2");
tab2.setTabListener(this);
getSupportActionBar().addTab(tab2);
ActionBar.Tab tab3 = getSupportActionBar().newTab();
tab3.setText("Tab3");
tab3.setTabListener(this);
getSupportActionBar().addTab(tab3);
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
String selectedtab = tab.getText().toString();
if(selectedtab.equalsIgnoreCase("Tab1"))
{
getSupportFragmentManager().beginTransaction().replace(R.id.tabfragment_container, new Tab1Fragment()).commit();
}
else if (selectedtab.equalsIgnoreCase("Tab2")) {
getSupportFragmentManager().beginTransaction().replace(R.id.tabfragment_container, new Tab2Fragment()).commit();
}
else if (selectedtab.equalsIgnoreCase("Tab3")){
getSupportFragmentManager().beginTransaction().replace(R.id.tabfragment_container, new Tab3Fragment()).commit();
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/tabfragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ManageActivity" >
</FrameLayout>
活动\u manage.xml:
public class ManageActivity extends SherlockFragmentActivity implements ActionBar.TabListener {
private Activity mActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manage);
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab tab1 = getSupportActionBar().newTab();
tab1.setText("Tab1");
tab1.setTabListener(this);
getSupportActionBar().addTab(tab1);
ActionBar.Tab tab2 = getSupportActionBar().newTab();
tab2.setText("Tab2");
tab2.setTabListener(this);
getSupportActionBar().addTab(tab2);
ActionBar.Tab tab3 = getSupportActionBar().newTab();
tab3.setText("Tab3");
tab3.setTabListener(this);
getSupportActionBar().addTab(tab3);
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
String selectedtab = tab.getText().toString();
if(selectedtab.equalsIgnoreCase("Tab1"))
{
getSupportFragmentManager().beginTransaction().replace(R.id.tabfragment_container, new Tab1Fragment()).commit();
}
else if (selectedtab.equalsIgnoreCase("Tab2")) {
getSupportFragmentManager().beginTransaction().replace(R.id.tabfragment_container, new Tab2Fragment()).commit();
}
else if (selectedtab.equalsIgnoreCase("Tab3")){
getSupportFragmentManager().beginTransaction().replace(R.id.tabfragment_container, new Tab3Fragment()).commit();
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/tabfragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ManageActivity" >
</FrameLayout>
注意:我的选项卡内容是Listfragments,它使用loader manager从Sqlite查询数据。我使用包含我的所有片段的。每次选择选项卡时,我仅切换Viewpager中的位置
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
int position = adapter.findItemPosition(this.id);
ViewPager viewPager = (YourActivity)getActivity().getViewPager(); // Convenience method
if (viewPager != null) {
viewPager.setCurrentItem(position, this.shouldScroll);
} else {
Log.d(getClass().getSimpleName(), "No pager available");
}
}
要使此代码正常工作,您需要一个Viewpager,并且必须通过PagerAdapter实例将所有选项卡添加到Viewpager中。我使用a,因为大多数时候没有那么多选项卡
这还允许用户在选项卡中滑动。如果用户通过刷卡更改所选选项卡,则需要更新所选选项卡。我在所有应用程序中都使用ActionBarSherlock。因此,下一个代码段使用supportActionBar。此代码示例是一个简单的侦听器,可以在ViewPager上设置该侦听器,以通过滑动更新选项卡更改
private final class TabPageChangedListener extends ViewPager.SimpleOnPageChangeListener {
@Override
public void onPageSelected(int position) {
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setSelectedNavigationItem(position);
} else {
Log.e(getClass().getSimpleName(),
"No actionbar available to change selected tab.");
}
}
}
如果您不希望选项卡可切换,也可以通过覆盖ViewPager和拦截滑动触摸动作来禁用滑动。这里是适配器。.我没有使用任何选项卡适配器?我编辑了答案。适配器用于保存Viewpager中显示的所有片段。如果不使用寻呼机/点击,您如何操作?片段A->片段B,片段B->片段A