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

时间:2019-07-18 10:01:14

标签: java android

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

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

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

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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

}
class SecondActivity extends ParentActivity {

}

答案 3 :(得分:0)

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

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
}

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