android-在操作栏标签中滑动不起作用

时间:2013-09-08 13:41:52

标签: android android-layout android-tabs

我已编写此代码以在操作栏标签之间执行水平滑动。但听众甚至没有被召唤。这是代码 -

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

    setupTabs();

    pager = (ViewPager) findViewById(R.id.pager);
    pager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {

        @Override
        public void onPageSelected(int position) {
            // When swiping between pages, select the
            // corresponding tab.
            System.out.println("in");
            getActionBar().setSelectedNavigationItem(position);
        }
    });
}
private void setupTabs() {
    ActionBar bar = getSupportActionBar();
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    ActionBar.Tab tab1 = bar.newTab();
    tab1.setText(R.string.tab_live);
    tab1.setTabListener(new MyTabListener());

    ActionBar.Tab tab2 = bar.newTab();
    tab2.setText(R.string.tab_tech_13);
    tab2.setTabListener(new MyTabListener());

    ActionBar.Tab tab3 = bar.newTab();
    tab3.setText(R.string.tab_tech_14);
    tab3.setTabListener(new MyTabListener());

    ActionBar.Tab tab4 = bar.newTab();
    tab4.setText(R.string.tab_map);
    tab4.setTabListener(new MyTabListener());

    ActionBar.Tab tab5 = bar.newTab();
    tab5.setText(R.string.tab_contacts);
    tab5.setTabListener(new MyTabListener());

        bar.addTab(tab1, POS_LIVE,true);
        bar.addTab(tab2, POS_TECH_13);
        bar.addTab(tab3, POS_TECH_14);
        bar.addTab(tab4, POS_MAP);
        bar.addTab(tab5, POS_CONTACTS);


    // bar.addTab(tab2, POS_COMPT);
    // bar.addTab(tab3, POS_EVENTS);

}
private class MyTabListener implements ActionBar.TabListener {

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        switch (tab.getPosition()) {


        case POS_TECH_13:
            FragmentTech13 frag1 = new FragmentTech13();
            ft.replace(android.R.id.content, frag1);
            break;

        case POS_TECH_14:
            FragmentTech14 frag2 = new FragmentTech14();
            ft.replace(android.R.id.content, frag2);
            break;

        case POS_CONTACTS:
            FragmentContacts frag3 = new FragmentContacts();
            ft.replace(android.R.id.content, frag3);
            break;


        case POS_LIVE:
            FragmentLive fraglive = new FragmentLive();
            ft.replace(android.R.id.content, fraglive);
            fraglive.setLiveUpdateListener(ActivityMain.this);
            break;
        }
    }

以上是MainActivity -

的xml文件
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />

当我尝试更改视图时,setOnPageChangeListener甚至没有被调用。

2 个答案:

答案 0 :(得分:0)

如果你正在使用FragmentActivity,下面的代码只是起作用:

public class Starter extends FragmentActivity {

/**
 * The {@link android.support.v4.view.PagerAdapter} that will provide
 * fragments for each of the sections. We use a
 * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which
 * will keep every loaded fragment in memory. If this becomes too memory
 * intensive, it may be best to switch to a
 * {@link android.support.v4.app.FragmentStatePagerAdapter}.
 */
SectionsPagerAdapter mSectionsPagerAdapter;

/**
 * The {ViewPager} that will host the section contents.
 */
static ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.starter);

    // Create the adapter that will return a fragment for each of the three
    // primary sections of the app.
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    //tab bar background
    mViewPager.setBackgroundColor(Color.rgb(r,g,b));

    FragmentPagerAdapter adapter = new SectionsPagerAdapter(getSupportFragmentManager());

    page = getIntent().getIntExtra("pagina", 2);

    mViewPager.setCurrentItem(page);
}
}

答案 1 :(得分:0)

这是我的(工作)代码:

public class MainActivity extends ActionBarActivity implements ActionBar.TabListener, ViewPager.OnPageChangeListener {
private ActionBar.Tab mTab;
private ActionBar mActionBar;
private ViewPager mPager;
private MainViewPagerAdapter mAdapter;

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

/**
 * Function creates all tabs with initializations and creates action bar
 */
private void initTabs(){
    // Create an actionbar
    mActionBar = getSupportActionBar();
    mActionBar.setDisplayHomeAsUpEnabled(true);
    mActionBar.setTitle(R.string.first_tab_title);
    mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_CUSTOM);
    mActionBar.setDisplayHomeAsUpEnabled(true);

    mPager = (ViewPager) findViewById(R.id.fragment_pager);
    mAdapter = new MainViewPagerAdapter(getSupportFragmentManager());
    mPager.setAdapter(mAdapter);
    mPager.setCurrentItem(0);
    mPager.setOnPageChangeListener(this);

    // Create Actionbar Tabs
    mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    // Create first Tab
    mTab = mActionBar.newTab().setTabListener(this);
    mTab.setText(R.string.first_tab_title);
    mTab.setIcon(R.drawable.tab_pet_selected);
    mActionBar.addTab(mTab);

    // Create Second Tab
    mTab = mActionBar.newTab().setTabListener(this);
    mTab.setText(R.string.demo_tab_title);
    mTab.setIcon(R.drawable.tab_vet_selected);
    mActionBar.addTab(mTab);

    // Create Third Tab
    mTab = mActionBar.newTab().setTabListener(this);
    mTab.setText(R.string.demo_tab_title);
    mTab.setIcon(R.drawable.tab_news_selected);
    mActionBar.addTab(mTab);

    // Create Third Tab
    mTab = mActionBar.newTab().setTabListener(this);
    mTab.setText(R.string.demo_tab_title);
    mTab.setIcon(R.drawable.tab_emergency_selected);
    mActionBar.addTab(mTab);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_about:
            Intent i = new Intent(MainActivity.this, AboutActivity.class);
            startActivity(i);
            return true;
    }
    return false;
}

@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    mPager.setCurrentItem(tab.getPosition(), true);
}

@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
}

@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}

@Override
public void onPageScrolled(int i, float v, int i2) {
}

@Override
public void onPageSelected(int i) {
    mActionBar.getTabAt(i).select();
}

@Override
public void onPageScrollStateChanged(int i) {
}

}

XML:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:id="@+id/layout_parent"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context=".MainActivity">

    <android.support.v4.view.ViewPager
            android:id="@+id/fragment_pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>


</RelativeLayout>

结果如下:(请不要担心图形;)) enter image description here