当前位置: 首页 > 知识库问答 >
问题:

持久片段和viewpager

单琛
2023-03-14

我想在一个Android应用程序中使用3个片段,ired:creating-and-using-fragmentpageradapter。但是我想使用viewpager来滑动和显示片段,就像在:ViewPager-with-FragmentPagerAdapter中解释的那样。但是这个代码或者Android Studio示例的默认代码,每次需要时使用newInstance创建实例,不需要时销毁。

// Returns the fragment to display for that page
    @Override
    public Fragment getItem(int position) {
        switch (position) {
        case 0: // Fragment # 0 - This will show FirstFragment
            return FirstFragment.newInstance(0, "Page # 1");
        case 1: // Fragment # 0 - This will show FirstFragment different title
            return FirstFragment.newInstance(1, "Page # 2");
        case 2: // Fragment # 1 - This will show SecondFragment
            return SecondFragment.newInstance(2, "Page # 3");
        default:
            return null;
        }
    }

但我想创造一次永远的:

        // Within an activity

private FragmentA fragmentA;
private FragmentB fragmentB;
private FragmentC fragmentC;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstanceState == null) {
        fragmentA = FragmentA.newInstance("foo");
        fragmentB = FragmentB.newInstance("bar");
        fragmentC = FragmentC.newInstance("baz");
    }
}

并且只隐藏/显示它们,如示例所示:

    // ...onCreate stays the same

// Replace the switch method
protected void displayFragmentA() {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    if (fragmentA.isAdded()) { // if the fragment is already in container
        ft.show(fragmentA);
    } else { // fragment needs to be added to frame container
        ft.add(R.id.flContainer, fragmentA, "A");
    }
    // Hide fragment B
    if (fragmentB.isAdded()) { ft.hide(fragmentB); }
    // Hide fragment C
    if (fragmentC.isAdded()) { ft.hide(fragmentC); }
    // Commit changes
    ft.commit();
}

但是如何使用FragmentPagerAdapter公共片段getItem(int位置)做到这一点就不再需要这样了

另外,如何访问数据

 public double [][] tableaux;

这是从一个片段的主要活动。如果我将刚在MainActivity onCreate中创建的片段的指针分配给指向MainActivity.TableAUX,那么数据将是持久的

共有1个答案

顾宏朗
2023-03-14

可以在getitem方法中返回预先初始化的片段。

@Override
public Fragment getItem(int position) {
    switch (position) {
    case 0: return fragmentA;
    case 1: return fragmentB;
    case 2: return fragmentC;
    default: return null;
}

更新:@alok是对的。在活动中不应该有片段引用。我建议您不要使用setoffScreenPageLimit增加屏幕外页限制,而应该考虑使用public void onSaveInstanceState(Bundle)公共视图onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState)savedInstanceState参数保存和还原Fragment状态。

 类似资料:
  • 默认情况下,所有 ItemReader 和 ItemWriter 在提交之前都会把当前状态信息保存到 ExecutionContext 中。 但有时我们又不希望保存这些信息。 例如,许多开发者使用处理指示器(process indicator)让数据库读取程序 ‘可重复运行(rerunnable)’。 在数据表中添加一个附加列来标识该记录是否已被处理。 当某条记录被读取/写入时,就将标志位从 fa

  • 此时,Frag2在堆栈上,是唯一可见的片段。我使用了replace和addToBackStack,因为我需要后退导航。我的问题是,当我在Frag2内旋转屏幕时,活动中的super.oncreate(savedInstanceState)方法调用frag1的构造函数。 在用户按下后退按钮之前,有没有什么方法可以避免调用Frag1的构造函数?

  • 我正在考虑使用Twilio的Authy作为我的应用程序的一次性密码验证解决方案。我仔细阅读了他们的文档,了解了如何使用电话号码注册新用户,以及如何验证他们确实拥有该电话。 我的问题是,一旦用户通过身份验证,我应该如何在我的应用程序中保持他们的身份验证?Twilio是否处理任何类型的JWT或令牌生成?或者,Twilio只是为了断言某个特定用户拥有一个特定的电话号码,而我(开发人员或其他服务,如Fir

  • Akka持久化使有状态的actor能留存其内部状态,以便在因JVM崩溃、监管者引起,或在集群中迁移导致的actor启动、重启时恢复它。Akka持久化背后的关键概念是持久化的只是一个actor的内部状态的的变化,而不是直接持久化其当前状态 (除了可选的快照)。这些更改永远只能被附加到存储,没什么是可变的,这使得高事务处理率和高效复制成为可能。有状态actor通过重放保存的变化来恢复,从而使它们可以重

  • 问题内容: 东西没有被冲走。发生的情况的简化示例: 输出: 我不知道是否必须对Session和Transaction进行某些操作才能使数据持久化,或者这是GPar中的错误。在底层的hibernate级别发生了什么? 我希望最近创建的Person在并行闭包中可见。 问题答案: Gpars是一个多线程工具,并且在您的域类中注入的hibernate会话不是线程安全的。 尝试使用以下方法或直接调用Sess

  • 问题内容: 我正在使用请求模块(Python 2.5的版本0.10.0)。我已经弄清楚了如何将数据提交到网站上的登录表单并检索会话密钥,但是我看不到在后续请求中使用此会话密钥的明显方法。有人可以在下面的代码中填写省略号还是建议其他方法? 问题答案: 您可以使用以下方法轻松创建持久会话: 之后,请继续执行您的请求: 有关会话的更多信息,请访问:https : //requests.kennethre