首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OnBackPressed在片段中的功能

OnBackPressed在片段中的功能
EN

Stack Overflow用户
提问于 2014-07-09 22:09:06
回答 4查看 961关注 0票数 1

正如title说的,是否有人知道如何实现OnBackPressed功能,就像在活动中一样,但在片段视图中?当我在片段中使用onKey、onKeyDown或onBackPressed时,它不起作用-- app即将关闭。当按下“后退”按钮时,我希望执行特定的代码,因为在其中一个片段中,我有ListView,其中包含依赖于用户操作的数据。

因此,当按下back时,我想修改变量的值(“类别”和“部分”),用特定的数据填充ListView (因此修改一些值,因为用户单击了一些东西,并刷新了这个ListView),给人一种用户正在返回(从部件到类别并关闭应用程序)的感觉。

但正如我提到的,当我使用onKey、onKeyDown或onBackPressed时,app正在关闭.例如,当我在我的片段类中包括:

代码语言:javascript
运行
复制
public void onBackPressed() {
    Toast.makeText(getActivity(), "AAAA", Toast.LENGTH_LONG).show();
}

吐司不会出现。用"onKeyDown“和"onKey”-同样的情况.我在这里做错了什么,有什么想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-07-10 12:30:43

终于明白了。在从方法"ActionBarActivity“到"onNavigationDrawerItemSelected”的“onNavigationDrawerItemSelected”中,我不得不将“片段newFragment”的声明移到该方法之外,以便使其在整个类中可用。然后,我必须在我的"OnBackPressed“中添加"ActionBarActivity”,如下所示:

代码语言:javascript
运行
复制
@Override
public void onBackPressed() {
    if (!newFragment.onBackPressed()) {
        super.onBackPressed();
    }
}

最后,在我的片段中还包括了onBackPressed:

代码语言:javascript
运行
复制
public boolean onBackPressed() {
    if (part != -1) {
        part = -1;
        toAdd = "" + category + "_";
        updateList();
        return true;
    }
    return false;
}

就像我想要的那样。当我向后推时,当我的片段中的变量"part“不是-1时,它将执行上面定义的操作,将true返回到"ActionBarActivity”,这样应用程序就不会关闭。但是,在我的片段中,变量为-1时,onBackPressed应用程序将返回主视图,当用户向后推时,应用程序将关闭。这就是我想要的!谢谢大家的帮助!

票数 1
EN

Stack Overflow用户

发布于 2014-07-09 22:19:21

回答你的第一句话:

正如title说的,是否有人知道如何实现OnBackPressed功能,就像在活动中一样,但在片段视图中?

要使back按钮与片段一起工作,您必须将它们添加到后台。这应该会触发您想要的函数。

代码语言:javascript
运行
复制
 // Create new fragment and transaction
 Fragment newFragment = new ExampleFragment();
 FragmentTransaction transaction = getFragmentManager().beginTransaction();

 // Replace whatever is in the fragment_container view with this fragment,
 // and add the transaction to the back stack
 transaction.replace(R.id.fragment_container, newFragment);
 transaction.addToBackStack(null);

 // Commit the transaction
 transaction.commit();
票数 1
EN

Stack Overflow用户

发布于 2015-05-29 09:47:31

代码语言:javascript
运行
复制
@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent register = new Intent(PollCreateCommunities_Activity.this, PollActivity.class);
    startActivity(register);
    finish();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24664532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档