【问题标题】:using switch statement to handle onBackPressed() in fragments使用 switch 语句处理片段中的 onBackPressed()
【发布时间】:2016-03-11 08:27:03
【问题描述】:

我正在尝试为每个片段以不同的方式处理 onBackPressed。为此,我想使用 switch 语句,其案例取决于当前显示的片段。 在我的主要我有。但不知道在 switch 语句中使用什么。

public class MyActivity extends Activity
{
    @Override
    public void onBackPressed(){
        super.onBackPressed();
switch(........){
        case (1):
        Fragment1.onBackPressed();
        case (2):
        Fragment2.onBackPressed();
    }
}

在我的片段中:

public class Fragment1 extends Fragment
{
    //My created method
    public static void onBackPressed()
    {
        // make it do what you want.
    }
}

所以我的问题是,我如何使用 switchstament,其中 de case 取决于此时显示的片段。

【问题讨论】:

    标签: java android switch-statement onbackpressed


    【解决方案1】:

    不要在单个onBackpressed活动中使用这样的开关,但是你可以得到每个片段对象的关键事件并这样做,

    fragment.getView().setFocusableInTouchMode(true); //Don't miss this line
    fragment.getView().setOnKeyListener( new OnKeyListener()
    {
        @Override
        public boolean onKey( View v, int keyCode, KeyEvent event )
        {
            if( keyCode == KeyEvent.KEYCODE_BACK )
            {
               //Do what you want
                return true;
            }
            return false;
        }
    } );
    

    【讨论】:

    • 你好,从我目前发现/听到的情况来看,这在使用例如 edittext 时不起作用,我有多个。因为那会得到焦点
    • 嘿,我找到了一种方法来完成这项工作,但这需要我单独处理每个编辑文本字段的事件,这似乎不是最好的方法。
    • 没有,但是当你在编辑文本中时,它会获得焦点并且不会执行片段的关键事件
    • 但是软键盘的后退键和清除键是不一样的。你确定当我们在edittext中聚焦时keyevent不起作用?
    • 很遗憾,我正在使用 editName.setOnKeyListener(new View.OnKeyListener(){ @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK){ backButton.toClientsFragment(); } return false; } }); 处理单独的 atm,这确实有效,但可能不是最好的方法
    【解决方案2】:

    onBackPressed()。您可以查看当前可见的Fragment

    public class MyActivity extends Activity
    {
        @Override
        public void onBackPressed(){
            if(yourFragment1.isVisible()) {
               ...
            }else if(yourFragment2.isVisible(){
               ...
            }
        }
    }
    

    【讨论】:

    • 你好,这似乎不起作用,如果 if isVisible() 它永远不会这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    相关资源
    最近更新 更多