如何禁用android片段类中按下的后退按钮

时间:2013-07-19 05:53:18

标签: java android eclipse

我想禁用片段类中的后退按钮。 onBackPressed()似乎无法在此片段中使用。我怎么能禁用后退按钮?

这是我的示例代码:

public class Login extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
       ,Bundle savedInstanceState) {
        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.login, null);
        return root;
    }

    public void onBackPressed() {
    }
}

10 个答案:

答案 0 :(得分:17)

您必须覆盖父FragmentActivity类的onBackPressed。因此,将您的代码放在父FragmentActivity中。或者您可以使用以下方法调用父方法:

public void callParentMethod(){
    getActivity().onBackPressed();
}
FragmentActivity中的

覆盖onBackPressed方法而不调用其超类来禁用后退按钮。

@Override
public void onBackPressed() {
  //super.onBackPressed();
  //create a dialog to ask yes no question whether or not the user wants to exit
  ...
}

答案 1 :(得分:6)

在你的oncreateView()方法中,你需要编写这段代码,并且在KEYCODE_BACk中返回true,那么它将停止特定片段的后退按钮选项

     View v = inflater.inflate(R.layout.xyz, container, false);
    //Back pressed Logic for fragment  
    v.setFocusableInTouchMode(true);  
    v.requestFocus();  
    v.setOnKeyListener(new View.OnKeyListener() {  
    @Override  
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {

                return true;  
            }  
        }  
        return false;  
    }  
});

答案 2 :(得分:4)

在您的父级活动

@Override
public void onBackPressed() {

    Fragment f = getSupportFragmentManager().findFragmentById(R.id.content_frame);
    if (f instanceof yourfragment) {//the fragment on which you want to handle your back press
        Log.i("BACK PRESSED", "BACK PRESSED");
    }else{
        super.onBackPressed();
    }
}

答案 3 :(得分:4)

OnBackPressedCallback

这是您可以在Fragment类中编写的代码,用于自定义后退按钮的按下。

<tr>
<?php
foreach($disname as $traveler) 
{
<td><?php echo $traveler['discname']; ?></td>
<?php
}
?>   
</tr>

相关链接

您可以阅读和研究有关此HERE

的更多信息

答案 4 :(得分:3)

更改

public void onBackPressed() {
}

@Override
public void onBackPressed() {
    super.onBackPressed()
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {

    }
    return super.onKeyDown(keyCode, event);    
}

答案 5 :(得分:3)

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
if ( keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

    onBackPressed();
}

return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {

return;
}

答案 6 :(得分:2)

这是您可以通过新的活动回拨来分段管理onBackPressed()的新方法:

    // Disable onBack click
    requireActivity().onBackPressedDispatcher.addCallback(this) {
      // With blank your fragment BackPressed will be disabled.
    }

答案 7 :(得分:0)

我知道为时已晚, 片段onCreate

```

    val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
    Log.d("tag","back button pressed")    // Handle the back button event
    }

    callback.isEnabled
```

答案 8 :(得分:0)

如果您想在没有任何按钮操作的情况下进行片段分割,可以尝试阻止取消片段。

在您的片段方法中添加此

 this.setCancelable(false);

答案 9 :(得分:0)

只需放置一个透明视图并为其设置 onClickListener