gpt4 book ai didi

Android 选项卡监听器在后台保持 2 个选项卡处于 Activity 状态

转载 作者:太空狗 更新时间:2023-10-29 16:38:13 25 4
gpt4 key购买 nike

我的应用程序中有一个选项卡 Activity ,

这里是一些简化的代码:

@SuppressLint("NewApi")
public class Rhino68PanelActivity extends FragmentActivity implements ActionBar.TabListener {

static String TAG = "Rhino68PanelActivty";

/**
* 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 {@link ViewPager} that will host the section contents.
*/
ViewPager mViewPager;


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

// Set up the action bar.
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

// 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);

// When swiping between different sections, select the corresponding
// tab. We can also use ActionBar.Tab#select() to do this if we have
// a reference to the Tab.
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});

// For each of the sections in the app, add a tab to the action bar.
for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
// Create a tab with text corresponding to the page title defined by
// the adapter. Also specify this Activity object, which implements
// the TabListener interface, as the callback (listener) for when
// this tab is selected.
actionBar.addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(i)).setTabListener(this));
}
}

@Override
protected void onDestroy() {
super.onDestroy();
Network.cancelRequests(Rhino68PanelActivity.this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.rhino68_panel, menu);
return true;
}

@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
// When the given tab is selected, switch to the corresponding page in
// the ViewPager.
mViewPager.setCurrentItem(tab.getPosition());
}

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

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

/**
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to
* one of the sections/tabs/pages.
*/
public class SectionsPagerAdapter extends FragmentPagerAdapter {

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

@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
Fragment fragment = null;

switch (position) {
case 0: {
fragment = new OneSectionFragment();
}
break;
case 1: {
fragment = new TwoSectionFragment();
}
break;
case 2: {
fragment = new ThreeSectionFragment();
}
break;
default: {
fragment = new OneSectionFragment();
}
}
return fragment;
}

@Override
public int getCount() {
// Show 3 total pages.
return 3;
}

@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
switch (position) {
case 0:
return "1";
case 1:
"2";
case 2:
"3";
}
return null;
}
}

public static class oneSectionFragment extends Fragment {


private static Context mContext;

public StatusSectionFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_rhino68_panel_status, container, false);
mContext = getActivity();
// update view
....
return rootView;
}
//fucntions and methods
}

public static class twoSectionFragment extends Fragment {


private static Context mContext;

public StatusSectionFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_rhino68_panel_status, container, false);
mContext = getActivity();
// update view
....
return rootView;
}
//fucntions and methods
}

现在我注意到一些奇怪的事情,我不确定它是如何工作的还是我做错了什么。

我在每个 sectionfragments onCreateView() 中设置了一个断点,现在取决于我在选项卡之间导航的方式,断点是否命中。

案例一: 如果我从选项卡 1 开始,然后导航到选项卡 2 - 没有遇到断点 如果我然后返回选项卡 1 - 再次没有遇到断点

案例二: 如果我从选项卡 1 开始,然后导航到选项卡 2 - 没有遇到断点 如果我然后转到选项卡 3 - 选项卡 3 中的断点被击中, 如果我然后回到 2 - 没有断点 如果我然后转到 1 - tab 1 断点被击中

当您点击 2 号标签时,它似乎加载了 3 号标签。现在这是选项卡管理器的属性吗?还是我的标签管理器只认为有 2 个标签?

我应该在哪里运行必须在选项卡实际出现时更新的代码?

最佳答案

尝试使用:

mViewPager.setOffscreenPageLimit(x);

此方法设置在空闲状态下应保留在 View 层次结构中当前页面任一侧的页面数。此设置默认为 1。 http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)

关于Android 选项卡监听器在后台保持 2 个选项卡处于 Activity 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22931678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com