如何避免打电话给onCreated()'切换到某些标签时附近标签的方法?

时间:2015-06-19 05:51:51

标签: android eclipse tabs fragmentpageradapter

我正在使用带有5个标签的eclipse中的应用程序,我花了很多时间,但现在我遇到了一个大问题:

  

当其中一个标签被激活时,下一个标签和prev标签也会加载   和onCreated()方法被调用,但我不需要我只需要   切换到制表符时调用onCreated()方法   enter image description here

这是我的项目文件

mainActivity.java

package info.androidhive.tabsswipe;
import info.androidhive.tabsswipe.adapter.TabsPagerAdapter;
import ir.zinoo.mankan.R;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.FragmentTransaction;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.content.SharedPreferences;


public class MainActivity extends FragmentActivity implements ActionBar.TabListener {


    private ViewPager viewPager;
    private TabsPagerAdapter mAdapter;
    private ActionBar actionBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Initilization

        viewPager = (ViewPager) findViewById(R.id.pager);
        actionBar = getActionBar();
        mAdapter = new TabsPagerAdapter(getSupportFragmentManager());



        viewPager.setAdapter(mAdapter);
        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

         //Adding Tabs
        for (String tab_name : tabs) {
            actionBar.addTab(actionBar.newTab().setTabListener(this));
        }
        actionBar.setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#333333")));
        actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#333333")));

        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) {

            }
        });
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {


    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // on tab selected
        // show respected fragment view
        viewPager.setCurrentItem(tab.getPosition());

    }

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

    }
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.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();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

tabPagerAdapter.java类

package info.androidhive.tabsswipe.adapter;

import info.androidhive.tabsswipe.BmiFragment;
import info.androidhive.tabsswipe.CaloriFragment;
import info.androidhive.tabsswipe.FatFragment;
import info.androidhive.tabsswipe.KamarFragment;
import info.androidhive.tabsswipe.OstokhanFragment;
import info.androidhive.tabsswipe.OtherFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class TabsPagerAdapter extends FragmentPagerAdapter {

    public TabsPagerAdapter(FragmentManager fm) {
        super(fm);
    }
    @Override
    public Fragment getItem(int index) {

        switch (index) {
        case 0:
            // Top Rated fragment activity
            return new BmiFragment();
        case 1:
            // Games fragment activity
            return new CaloriFragment();
        case 2:
            // Movies fragment activity
            return new KamarFragment();
        case 3:
            // Movies fragment activity
            return new OstokhanFragment();
        case 4:
            // Movies fragment activity
            return new FatFragment();
        case 5:
            // Movies fragment activity
            return new OtherFragment();
        }

        return null;
    }

    @Override
    public int getCount() {
         //get item count - equal to number of tabs
        return 6;
    }

}

现在我的问题是如何在切换到特殊标签时避免调用其他标签的创建方法?

1 个答案:

答案 0 :(得分:1)

你做不到。您可以在View Pager

中设置“预缓存”标签的数量
viewPager.setOffscreenPageLimit(3);

但要加载的最小数量是前后一个,相当于:

viewPager.setOffscreenPageLimit(1);

为了能够滑动。