Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >不附着于活性的片段怎么弄?

不附着于活性的片段怎么弄?

提问于 2018-02-06 20:09:13
回答 10关注 0查看 805

我创建了一个小测试应用程序,它代表了我的问题。我使用ActionBarSherlock来用(Sherlock)片段实现选项卡。

我的代码:TestActivity.java

代码语言:javascript
运行
AI代码解释
复制
public class TestActivity extends SherlockFragmentActivity {
    private ActionBar actionBar;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setupTabs(savedInstanceState);
    }

    private void setupTabs(Bundle savedInstanceState) {
        actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        addTab1();
        addTab2();
    }

    private void addTab1() {
        Tab tab1 = actionBar.newTab();
        tab1.setTag("1");
        String tabText = "1";
        tab1.setText(tabText);
        tab1.setTabListener(new TabListener<MyFragment>(TestActivity.this, "1", MyFragment.class));

        actionBar.addTab(tab1);
    }

    private void addTab2() {
        Tab tab1 = actionBar.newTab();
        tab1.setTag("2");
        String tabText = "2";
        tab1.setText(tabText);
        tab1.setTabListener(new TabListener<MyFragment>(TestActivity.this, "2", MyFragment.class));

        actionBar.addTab(tab1);
    }
}

TabListener.java

代码语言:javascript
运行
AI代码解释
复制
public class TabListener<T extends SherlockFragment> implements com.actionbarsherlock.app.ActionBar.TabListener {
    private final SherlockFragmentActivity mActivity;
    private final String mTag;
    private final Class<T> mClass;

    public TabListener(SherlockFragmentActivity activity, String tag, Class<T> clz) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
    }

    /* The following are each of the ActionBar.TabListener callbacks */

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        SherlockFragment preInitializedFragment = (SherlockFragment) mActivity.getSupportFragmentManager().findFragmentByTag(mTag);

        // Check if the fragment is already initialized
        if (preInitializedFragment == null) {
            // If not, instantiate and add it to the activity
            SherlockFragment mFragment = (SherlockFragment) SherlockFragment.instantiate(mActivity, mClass.getName());
            ft.add(android.R.id.content, mFragment, mTag);
        } else {
            ft.attach(preInitializedFragment);
        }
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        SherlockFragment preInitializedFragment = (SherlockFragment) mActivity.getSupportFragmentManager().findFragmentByTag(mTag);

        if (preInitializedFragment != null) {
            // Detach the fragment, because another one is being attached
            ft.detach(preInitializedFragment);
        }
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // User selected the already selected tab. Usually do nothing.
    }
}

MyFragment.java

代码语言:javascript
运行
AI代码解释
复制
public class MyFragment extends SherlockFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        new AsyncTask<Void, Void, Void>() {

            @Override
            protected Void doInBackground(Void... params) {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException ex) {
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void result){
                getResources().getString(R.string.app_name);
            }

        }.execute();
    }
}

我增加了Thread.sleep部分模拟下载数据中的代码onPostExecute是模拟使用Fragment...

当我在景物和肖像之间快速旋转屏幕时,我在onPostExecute代码:

java.lang.IllegalStateException: Fragment MyFragment{410f6060} not attached to Activity

我认为这是因为同时创建了一个新的MyFragment,并且在AsyncTask完成之前附加到ActivityonPostExecute中的代码调用一个未连接的MyFragment

但是我怎样才能解决这个问题?

回答 10

初冬微笑已冻僵

回答已采纳

发布于 2018-02-06 20:48:38

我找到了一个非常简单的答案:isAdded():

true如果该片段当前被添加到其活动中。

代码语言:javascript
运行
AI代码解释
复制
@Override
protected void onPostExecute(Void result){
    if(isAdded()){
        getResources().getString(R.string.app_name);
    }
}

避免onPostExecute被调用时,Fragment没有附加到Activity是取消AsyncTask当暂停或停止Fragment.然后isAdded()不再有必要了。

Rom_z

发布于 2018-02-07 06:02:33

在我的例子中,片段方法在

代码语言:javascript
运行
AI代码解释
复制
getActivity().onBackPressed();

活动执行wrl

发布于 2018-02-07 04:52:37

如果你扩展Application初始化并维护一个静态的“global”上下文对象,如下所示,然后你可以使用它而不是该活动来加载字符串资源。

代码语言:javascript
运行
AI代码解释
复制
public class MyApplication extends Application {
    public static Context GLOBAL_APP_CONTEXT;

    @Override
    public void onCreate() {
        super.onCreate();
        GLOBAL_APP_CONTEXT = this;
    }
}

如果你用这个,你就能逃脱Toast和资源加载而不用担心生命周期。

和开发者交流更多问题细节吧,去 写回答
相关文章
Blender导出glb,NLA轨道分片段裁剪设置不生效
我使用blender3.4在制作完模型和动画后,建立了两个NLA轨道,都是对同一个动作的裁剪,像下图这样:
用户1200827
2023/01/11
1K0
Stanford | 基于蛋白-配体复合物的几何深度学习指导基于片段的配体生成
本文介绍一篇来自于斯坦福大学计算机科学系Ron O. Dror教授组的分子生成工作——《Fragment-Based Ligand Generation Guided By Geometric Deep Learning On Protein-Ligand Structure》。计算辅助新型分子设计有可能加速药物发现。然而,在药物发展中分子优化是一项耗时的工作,通常需要花费数年对分子的多种性质同时进行优化。将一个能和蛋白质口袋结合的小的、片段状初始分子扩展成更大的分子,使之与已知药物的物理化学性质相匹配,这是生物信息学中一个特定的分子优化问题。针对这一问题,作者使用数据有效的E(3)等变网络和3D原子点云表征进行建模,这种方法能结合蛋白质口袋的3D空间信息同时生成合理的分子,从而加速药物发现过程。通过对多种性质进行评估证明该框架确实能生成可行的分子。
DrugAI
2022/06/10
4300
Stanford | 基于蛋白-配体复合物的几何深度学习指导基于片段的配体生成
【指令篇】键盘附着指令调整软键盘
现在开始实现这个指令,新建指令之前添加Keyboard插件,一般我们的项目默认已经装上了的,我们只需安装相应的ionic-native子模块:
IT晴天
2018/08/20
7360
【CSS】CSS 背景设置 ⑥ ( 背景附着 | background-attachment )
background-attachment 属性值设置 : scroll 或 fixed 二选一 ;
韩曙亮
2023/03/30
1.6K0
【CSS】CSS 背景设置 ⑥ ( 背景附着 | background-attachment )
kubernetes存活性探针
Kubernetes是一个强大的容器编排系统,能够帮助开发人员轻松管理和部署容器化应用程序。在Kubernetes中,存活性探针是一种重要的机制,用于确保容器能够正常运行,并及时检测和处理容器中可能出现的故障。
玖叁叁
2023/04/29
9500
Linux Mint 19 “Tara”于5月上线:承诺不涉及隐私数据
Linux Mint 创始人兼开发负责人 Clement Lefebvre 在今天发布的月报中表示,即将上线的 Linux Mint 19 “Tara”将基于 Canonical 最新发布的 Ubuntu 18.04 LTS(Bionic Beaver)系统,但目前尚无法确认准确的发布日期,此外 Lefebvre 也表示 LMDE(Linux Mint Debian Edition)3 版本也即将发布。
Debian中国
2018/12/21
7590
JavaScript灵活性
一提及JavaScript,大家都会想到其基于对象、简单、跨平台,然而其灵活性也值得大家津津乐道的!
奋飛
2019/08/15
3820
PROGENy ||推断通路活性
异常细胞信号会引起癌症等其他疾病,并且是常见的治疗的靶点。常可以通过基因的表达来推断某个信号通路的活性。然而,只考虑基因表达对通路的作用往往忽略了翻译后修饰的作用,并且下游信号代表非常特定的实验条件。在这里,作者提出介绍PROGENy,这是一种通过利用大量公开可用的扰动实验,来克服了这两个局限性的方法。与现有方法不同,PROGENy可以(i)恢复已知驱动基因突变的作用,(ii)提供或改善药物的marker,以及(iii)区分致癌和肿瘤抑制途径,以确保患者生存。
生信编程日常
2020/11/03
1.6K0
PROGENy ||推断通路活性
Mathematica教你怎么弄晕自己!!!
盯着十字架中心,很快你应该看到一个绿点绕圈,最终粉红色的点会消失,只会有绿点。。。。。。。 盯着,千万别跑偏。。。。。。。。。 小编眼已花。。。。。。。
WolframChina
2018/05/31
1.4K0
设计模式【13】-- 模板模式怎么弄?
模板模式,同样是一种行为型模式,也就是关于对象做什么或者怎么做的设计模式。模板模式的本质需要定义操作中的算法的框架,但是有一些步骤,又不需要具体的实现,而是不同的子类各自实现。子类不能修改流程框架,但是部分的步骤可以做定制化的实现。
秦怀杂货店
2022/02/15
1.2K0
设计模式【13】-- 模板模式怎么弄?
文档片段(createDocumentFragment)
1.createDocumentFragment var one = document.getElementById("one"); var k = document.createDocumentFragment(); var p = document.createElement("p"); p.innerHTML = "我们不一样"; k.appendChild(p); one.appendChild(k) console.log(k) //文档里没
天天_哥
2018/09/29
5240
[linux][c/c++]代码片段02
 gcc `pkg-config --cflags gtk+-3.0` -o example-1 example-1.c `pkg-config --libs gtk+-3.0`
landv
2019/11/11
5040
[linux][c/c++]代码片段02
[linux][c/c++]代码片段01
#include <stdio.h> #include <unistd.h> void usage() { printf("Usage:\n"); printf("\tOptDemo [-a] [-b] [-c message]"); } int main(int argc, char *argv[]) { int o; const char *optstring = "abc::"; // 有三个选项-abc,其中c选项后有两个冒号,表示后面可选参数 whi
landv
2019/11/10
6840
php代码片段
获取文件后缀
lilugirl
2019/05/26
4.1K0
DoRothEA||推断单细胞的TF活性
DoRothEA是一种包含转录因子(TF)与其靶标相互作用的基因集资源。一个TF及其对应靶点的集合被定义为调节子(regulons)。DoRothEA regulons 收集了不同类型的证据,例如文献,ChIP-seq peaks,TF结合位点基序以及从基因表达推断相互作用等。
生信编程日常
2020/11/03
1.6K0
DoRothEA||推断单细胞的TF活性
JSX-灵活性
博主的实现代码如上,因为在 {} 中的内容与 JS 的内容一样,所以可以在当中进行编写逻辑的分支代码,来控制样式,通过观察发现,如上的实现和 Vue 中的 v-show 指令很像,其实除了通过 JSX 实现 Vue 当中 v-show 一样的指令功能以外,还可以实现 Vue 当中的 v-if 指令,如下:
杨不易呀
2023/09/29
1700
kubernetes存活性探针使用
在Kubernetes中使用存活性探针非常简单。只需在容器规格中添加livenessProbe字段,然后指定探针的类型、检查频率、超时时间等参数即可。以下是一个使用HTTP存活性探针的示例:
玖叁叁
2023/04/29
4130
HTML代码片段
IE条件注释 <!--[ifIE6]> IE6版本有效 <![endif]--> <!--[if gt IE6]> IE6以上版本有效 <![endif]--> <!--[if gte IE6]> IE6(包含)及以上版本有效 <![endif]--> <!--[if lt IE8]> IE8以下版本有效 <![endif]--> <!--[if lte IE8]> IE8(包含)及以下版本有效 <![endif]--> <!--[if !IE]>--> 除了IE <![endif]--> 用Chrome或
前端GoGoGo
2018/08/27
5.4K0
2018国内基因编辑技术走势
3月30~31日,由北京大学天然药物及仿生药物国家重点实验室主办的2018基因编辑学术研讨会将在京举行。届时众多一线科研工作者将聚集于此共襄学术盛宴。 2018基因编辑技术期待进展一览 王皓毅 中国科学院动物研究所 CRISPR-Cas9在动物模型构建、T细胞治疗以及基因表达调控中的应用 高效精确的基因工程技术对于发展基因治疗,建立细胞和动物疾病模型具有极为重要的价值。近年来特异性定点核酸酶的研究取得了长足的进步。为了突破传统基因打靶方法的局限,我们率先通过受精卵注射CRISPR-Cas9一步获得多基
生信宝典
2018/03/26
1.3K0
Vue.js 中的片段
为了使诸如屏幕阅读器之类的辅助技术能够解释网页和应用程序,无障碍支持是必需的。为了使这些技术起作用,开发人员需要考虑可访问性。
疯狂的技术宅
2020/01/14
2.7K0
Vue.js 中的片段

相似问题

这怎么弄?

1195

网站备案怎么弄?

2500

子用户怎么弄?

1169

连接失败怎么弄?

5452

域名怎么弄备案授权?

2266
相关问答用户
腾讯云TDP | TDP会员擅长3个领域
平安资管 | 架构师擅长4个领域
擅长3个领域
擅长5个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档