【问题标题】:How can I confirm exit from the individual fragment?如何确认退出单个片段?
【发布时间】:2018-01-24 05:49:42
【问题描述】:

我已经能够在离开片段之前确认退出。然而,我的活动有六张卡片,每张卡片在点击时都会调用一个片段。确认退出适用于此活动中的所有片段。我如何将单个片段应用于调用自己的片段(称为 GpsFragment)的花园映射卡。我需要在离开这个 Fragment(GpsFragment) 之前确认退出

这是我的主菜单

这是我在主要活动中的代码

 @Override
public void onBackPressed() {

    int count = getFragmentManager().getBackStackEntryCount();

    if (count == 1) {

        new AlertDialog.Builder(this)
                .setIcon(android.R.drawable.ic_dialog_alert)
                .setTitle("Closing EzyAgric")
                .setMessage("Are you sure you want to close EzyAgric?")
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }

                })
                .setNegativeButton("No", null)
                .show();
        //additional code
    } else {
        getFragmentManager().popBackStack();
    }

}

【问题讨论】:

标签: android android-fragments


【解决方案1】:

定义一个接口来与您的活动和片段通信

public abstract class BackPressFragment extends BaseFragment {
    public abstract boolean processBackPress();
}

YourFragment extends BackPressFragment {
    .....
}

并在你的activity中处理key事件,通过接口传递事件。

【讨论】:

  • 这是一个答案吗?还是评论?
  • 我的意思是你可以定义一个接口并将你的活动返回按键事件传递给你的片段,并处理该事件。
【解决方案2】:

您好,您需要将 onBackPressed() 事件发送到片段。最好的方法是通过接口。 像这样创建一个接口:

 public interface IOnBackPressListener {

     void onBackPressed();
  } 

现在在片段中实现你的接口,如下所示:

 public class MyFragment extends Fragment implements IOnBackPressListener {

    public MyFragment(){

   }

   @Override
   public void onAttach(Context context) {
      super.onAttach(context);

    }

    @Override
    public void onBackPressed() {
     Log.e("Fragment","On Back pressed");
       // Alert code comes here
     }
    }

现在在您的活动中,在 onBackPressed() 中编写以下代码

   @Override
    public void onBackPressed() {
     IOnBackPressListener fragment=((IOnBackPressListener) 
     getSupportFragmentManager().findFragmentById(R.id.container));
     if(fragment!=null)
        fragment.onBackPressed();
     }

【讨论】:

  • 我正在尝试这个。请在活动中解释代码
  • 在活动中,您从片段管理器中获取当前片段。然后你会将调用发送回那个特定的片段
  • 好的,关于 R.id.container
  • R.id.container 是保存片段的父布局。就我而言,我使用了 FrameLayout。如果您使用过 ,请给出它的 id。
  • 让我试试 FrameLayout 看看。因为对我来说我使用的是RelativeLayout
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多