繁体   English   中英

我可以在两个活动中使用相同的方法吗?

[英]Can i use the same method in two activities?

我将导航栏隐藏在一个活动中,并且工作正常。

我的问题是是否有任何方法可以在另一个活动中调用此方法,还是应该将其复制并粘贴两次?

public void hideNavigationBar() {
int currentApiVersion;
currentApiVersion = android.os.Build.VERSION.SDK_INT;

final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_FULLSCREEN
        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

// This work only for android 4.4+
if(currentApiVersion >= Build.VERSION_CODES.KITKAT)
{

    getWindow().getDecorView().setSystemUiVisibility(flags);

    // Code below is to handle presses of Volume up or Volume down.
    // Without this, after pressing volume buttons, the navigation bar will
    // show up and won't hide
    final View decorView = getWindow().getDecorView();
    decorView
            .setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener()
            {

                @Override
                public void onSystemUiVisibilityChange(int visibility)
                {
                    if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
                    {
                        decorView.setSystemUiVisibility(flags);
                    }
                }
            });
}
}

我试图通过创建一个实例在另一个活动中调用相同的方法

 MainActivity mainActivity = new MainAcitivity();
 mainAcitvity.hideNavigationBar();

,但会抛出

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.getDecorView()' on a null object reference

创建BaseActivity()并使用BaseActivity扩展其他Activity 并将您的常用方法放在BaseActivity 然后,您可以从任何Activity进行呼叫。

作为创建基类的替代方法:

public static void hideNavigationBar(View decorView) {

    final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

    if(SDK_INT >= KITKAT) {
        decorView.setSystemUiVisibility(flags);
        decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
            @Override
            public void onSystemUiVisibilityChange(int visibility) {
                if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                    decorView.setSystemUiVisibility(flags);
                }
            }
        });
    }
}

用法(在任何活动中):

hideNavigationBar(getWindow().getDecorView());

是的,创建扩展Activity.java或AppcompatActivity.java类的父活动类肯定会为您提供帮助。

稍后,可以在您的两个活动中扩展此父活动。

class ParentActivity extends Activity{
   public void yourMethod(){
  }
}
//Later
class FirstActivity extends ParentActivity {

}
class SecondActivity extends ParentActivity {

}

首先,您必须创建父活动。

public class ParentActivity extends Activity {
     public void yourMethod() {
     //implement your method here
     }
}

之后,您只需要像这样创建活动即可:

class Activity1 extends ParentActivity {
//call the override method
}
class Activity2 extends ParentActivity {
//call the override method
}

如果您有片段,则可以用相同的方法解决此问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM