在Android Activity或Fragment中仅加载一次项目

时间:2015-10-26 08:52:44

标签: android-fragments android-activity

想与您核实活动和片段生命周期。

假设我有Activity A来电Activity B。在Activity B内,我有Fragment CFragment D由标签分隔。

Fragment C将加载从Web API下载的微调器值。用户按下后退按钮到Activity A再到Activity B后,我不想重新加载微调器并调用Web API来填充其值。

在这种情况下,我应该在Fragment C处将代码放在初始化微调器一次?

以下是我创建活动B的方法

public class Activity_B extends custom_activity{

final Context context = this;

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

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    ViewPager viewPager = (ViewPager) findViewById(R.id.pager);

    viewPager.setAdapter(new SectionPagerAdapter(getSupportFragmentManager()));
    tabLayout.setupWithViewPager(viewPager);
}

  public class SectionPagerAdapter extends FragmentPagerAdapter {

    public SectionPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new Fragment_C();
            case 1:
            default:
                return new Fragment_D();
        }
    }

    @Override
    public int getCount() {
        return 2;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return getResources().getString(R.string.fragment_c);
            case 1:
            default:
                return getResources().getString(R.string.fragment_d);
        }
    }
}

}

1 个答案:

答案 0 :(得分:0)

您可以使用android:launchMode =“singleInstance”

来实现此行为
        <activity
        android:name="com.aitrich.android.framework.ui.activity.HomeActivity"
        android:label="@string/app_name"
        android:launchMode="singleInstance"
        android:screenOrientation="portrait"   >
    </activity>

在ActivityB中使用android:launchMode =“singleInstance”标志只会创建该活动的单个实例。因此,您可以在再次从ActivityA导航时保留数据。

注意:假设您没有完成ActivityB