【问题标题】:tabs are not swiping in android标签没有在android中滑动
【发布时间】:2014-07-07 11:34:23
【问题描述】:

当我尝试在 onTabSelected() 方法中使用 setCurrentItem(arg0.getPosition()) 时,我的应用程序崩溃了,同时实现了我点击标签的功能,下面的 fragments 应该也随之改变.....它的工作方式相反,当我滑动时,Tabs 会随之改变。

代码如下:

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class AboutUs extends FragmentActivity implements TabListener {

private ActionBar actionBar;
ViewPager viewPager;

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.aboutus);
    intialization();

}

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void intialization() {
    // TODO Auto-generated method stub

    actionBar = getActionBar();
//this is the line where the application crashes
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    ActionBar.Tab tab1 = actionBar.newTab();
    tab1.setText("MUMTAZ ANWAR");
    tab1.setTabListener(this);

    ActionBar.Tab tab2 = actionBar.newTab();
    tab2.setText("CREDIENTIALS");
    tab2.setTabListener(this);

    actionBar.addTab(tab1);
    actionBar.addTab(tab2);

    viewPager = (ViewPager) findViewById(R.id.pagger);
    viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg0) {
            // TODO Auto-generated method stub
            actionBar.setSelectedNavigationItem(arg0);
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub

        }
    });

}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
    //Log.d("HAMZA", "onTabReselected at  " + "position" + tab.getPosition()
    //      + "name" + tab.getText());
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
    //Log.d("HAMZA", "onTabselected at  " + "position" + tab.getPosition()
        //  + "name" + tab.getText());
//this is the line where the application crashes
    viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
    //Log.d("HAMZA", "onTabUnselected at  " + "position" + tab.getPosition()
    //      + "name" + tab.getText());
}

}

MyAdapter.java:

class MyAdapter extends FragmentPagerAdapter {

public MyAdapter(FragmentManager fm) {
    super(fm);
    // TODO Auto-generated constructor stub
}

@Override
public Fragment getItem(int arg0) {
    // TODO Auto-generated method stub

    Fragment fragment = null;
    if (arg0 == 0) {

        fragment = new BlankFragment();
    }

    if (arg0 == 1) {

        fragment = new BlankFragmenta();
    }

    return fragment;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return 2;
}

}

【问题讨论】:

    标签: java android xml android-fragments


    【解决方案1】:

    您需要做的就是在添加选项卡之前初始化视图寻呼机,即重新排序视图寻呼机初始化语句并在您的 intialization() 中添加选项卡语句。见下文

    viewPager = (ViewPager) findViewById(R.id.pagger);
    viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    
        @Override
        public void onPageSelected(int arg0) {
            // TODO Auto-generated method stub
            actionBar.setSelectedNavigationItem(arg0);
        }
    
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub
    
        }
    });
          ActionBar.Tab tab1 = actionBar.newTab();
          tab1.setText("MUMTAZ ANWAR");
          tab1.setTabListener(this);
    
         ActionBar.Tab tab2 = actionBar.newTab();
         tab2.setText("CREDIENTIALS");
         tab2.setTabListener(this);
    
         actionBar.addTab(tab1);
         actionBar.addTab(tab2);
    

    希望这会有所帮助。

    【讨论】:

    • 我没有得到你!您必须能够使用滑动和标签点击在标签之间切换。
    • 我想您删除了覆盖 TabListener 的代码,即请添加 @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { viewPager.setCurrentItem(tab.getPosition()); }
    【解决方案2】:

    我相信,正如 Humblerookie 建议的那样,这是一个顺序问题。按照下面代码中的顺序。它应该可以帮助你。

    //Create View Pager first
    viewPager = (ViewPager) findViewById(R.id.pager);
    actionBar = getSupportActionBar();
    viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    
    // Add Tabs next
    ActionBar.Tab tab1 = actionBar.newTab();
    tab1.setText("MUMTAZ ANWAR");
    tab1.setTabListener(this);
    
    ActionBar.Tab tab2 = actionBar.newTab();
    tab2.setText("CREDIENTIALS");
    tab2.setTabListener(this);
    
    actionBar.addTab(tab1);
    actionBar.addTab(tab2);
    
    
        // finally, set the pagelistener : swiping the viewpager make respective tab selected
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    
            @Override
            public void onPageSelected(int position) {
                // on changing the page
                // make respected tab selected
                actionBar.setSelectedNavigationItem(position);
            }
    
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }
    
            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多