【问题标题】:Functionality of OnBackPressed inside of fragment片段内部 OnBackPressed 的功能
【发布时间】:2014-07-09 22:09:06
【问题描述】:

正如标题所说,有谁知道如何实现 OnBackPressed 功能,就像在 Activity 中一样,但在 Fragment View 中? 当我在 Fragment 中使用 onKey、onKeyDown 或 onBackPressed 时它不起作用 - 应用程序正在关闭。我想在按下后退按钮时执行特定代码,因为在其中一个片段中我有 ListView,它根据用户操作填充了数据。

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

但正如我所提到的,当我使用 onKey、onKeyDown 或 onBackPressed 时,应用程序正在关闭...例如当我包含在我的 Fragment 类中时:

public void onBackPressed() {
    Toast.makeText(getActivity(), "AAAA", Toast.LENGTH_LONG).show();
}

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

【问题讨论】:

  • 发布更少的代码,以便我们为您提供帮助!只与我们分享您的问题。

标签: android listview android-fragments fragment


【解决方案1】:

回答你的第一句话:

正如标题所说,有谁知道如何实现 OnBackPressed 功能,就像在 Activity 中一样,但在 Fragment View 中?

要使后退按钮与片段一起使用,您必须将它们添加到后台堆栈。这应该会触发您想要的功能。

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

【讨论】:

  • 谢谢,有点用 - 首先我必须将“getFragmentManager()”更改为“getSupportFragmentManager()”。现在,当我将片段添加到后台堆栈并在我的应用程序中按回时,该片段将返回到主片段,而不是关闭应用程序。但它没有执行任何东西,例如,“onKey”方法......
  • 嘿。如果必须使用 getFragmentManager 或 getSupportFragmentNamanger 取决于您是否使用 SupportLibrary。所以没关系,你是如何解决的。关于另一件事,我认为您至少应该能够覆盖 onBackPressed。如果你到那时还没有解决,明天我会研究这个问题。现在需要床:-)
  • @Override public void onBackPressed() { new AlertDialog.Builder(this) .setTitle("真的退出?") .setMessage("你确定要退出吗?") .setNegativeButton(android .R.string.no, null) .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { MainActivity.super.onBackPressed(); } })。创建()。显示(); }
【解决方案2】:

终于明白了。 我必须在方法“onNavigationDrawerItemSelected”中的“ActionBarActivity”中将“Fragment newFragment”的声明移到此方法之外,以使其在整个班级中可用。然后我必须在我的“ActionBarActivity”中包含“OnBackPressed”,如下所示:

@Override
public void onBackPressed() {
    if (!newFragment.onBackPressed()) {
        super.onBackPressed();
    }
}

最后,在我的 Fragment 中,我还包含了 onBackPressed:

public boolean onBackPressed() {
    if (part != -1) {
        part = -1;
        toAdd = "" + category + "_";
        updateList();
        return true;
    }
    return false;
}

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

【讨论】:

    【解决方案3】:
    @Override
    public void onBackPressed() {
        super.onBackPressed();
        Intent register = new Intent(PollCreateCommunities_Activity.this, PollActivity.class);
        startActivity(register);
        finish();
    }
    

    【讨论】:

      【解决方案4】:
      public boolean onOptionsItemSelected(MenuItem menuItem) {
          switch (menuItem.getItemId()) {
              case android.R.id.home:
                  Intent register = new Intent(PollCreateCommunities_Activity.this, PollActivity.class);
                  startActivity(register);
                  return true;
          }
          return (super.onOptionsItemSelected(menuItem));
      }
      

      【讨论】:

      • 请在您的答案中添加描述,详细说明为什么它可以解决 OP 的问题。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多