我有一个活动和一个片段。在片段中我有导航抽屉,我已经在活动中的导航抽屉中应用了onBackpressed。我的问题是当我按下按钮转到片段后我按下后退按钮去对于活动,它给了我一个错误。
这是我的代码: -
MainActivity.java
@Override
public void onBackPressed() {
Home_Screen home_screen=(Home_Screen)getFragmentManager()
.findFragmentById(R.id
.Home_screen_fragment);
DrawerLayout navigation_drawer=home_screen.getView().findViewById(R.id.drawer_layout);
if(navigation_drawer.isDrawerOpen(GravityCompat.START)) {
navigation_drawer.closeDrawer(GravityCompat.START);
}
else
super.onBackPressed();
}
Home_screen.java
public class Home_Screen extends Fragment implements OnNavigationItemSelectedListener {
DrawerLayout navigation_drawer;
NavigationView navigationView;
Button logout_Yes_button,logout_no_button,home_screen_take_attendance_button;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View Home_screen= inflater.inflate(R.layout.navigation_drawer,container,false);
android.support.v7.widget.Toolbar toolbar=(android.support.v7.widget.Toolbar)
Home_screen.findViewById(R.id
.custom_action_bar);
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
navigation_drawer=(DrawerLayout)Home_screen.findViewById(R.id.drawer_layout);
navigationView=(NavigationView)Home_screen.findViewById(R.id.Navigation_view_for_teacher);
home_screen_take_attendance_button=(Button)Home_screen.findViewById(R.id
.home_screen_take_attendance_button);
home_screen_take_attendance_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentManager fragmentManager=getFragmentManager();
FragmentTransaction fragmentTransaction=fragmentManager
.beginTransaction();
fragmentTransaction.setCustomAnimations(R.animator.slide_in_left,R.animator
.slide_out_left,R.animator.slide_in_right,R.animator.slide_out_right);
Take_attendance take_attendance=new Take_attendance();
fragmentTransaction.replace(R.id.fragment_take_attendance,take_attendance);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
});
for (int i = 0; i < navigationView.getChildCount(); i++) {
navigationView.getChildAt(i).setOverScrollMode(View.OVER_SCROLL_NEVER);
}
navigationView.setNavigationItemSelectedListener(this);
ActionBarDrawerToggle actionBarDrawerToggle=new ActionBarDrawerToggle(getActivity(),
navigation_drawer,toolbar,R.string.Open_drawer ,R.string.Close_drawer);
navigation_drawer.addDrawerListener(actionBarDrawerToggle);
actionBarDrawerToggle.syncState();
return Home_screen;
}
Home_screen_layout.xml
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/Home_screen_student_fragment"></RelativeLayout>
logcat显示了这个 - :
04-21 14:39:17.971 22893-22893/? E/Zygote: no v2
04-21 14:39:26.931 22893-22893/com.example.user.attendance E/InputEventSender: Exception dispatching finished signal.
04-21 14:39:26.931 22893-22893/com.example.user.attendance E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
04-21 14:39:26.936 22893-22893/com.example.user.attendance E/MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View com.example.user.attendance.Home_Screen.getView()' on a null object reference
at com.example.user.attendance.MainActivity.onBackPressed(MainActivity.java:156)
at android.app.Activity.onKeyUp(Activity.java:2727)
at android.view.KeyEvent.dispatch(KeyEvent.java:3290)
at android.app.Activity.dispatchKeyEvent(Activity.java:2997)
at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:534)
at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:58)
at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:316)
at com.android.internal.policy.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2735)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:5391)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5344)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4790)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4843)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4809)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4950)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4817)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5007)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4790)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4843)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4809)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4817)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4790)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4843)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4809)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4983)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:5228)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2907)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2479)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2470)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2884)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:323)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:7402)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
04-21 14:39:26.936 22893-22893/com.example.user.attendance E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.user.attendance, PID: 22893
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View com.example.user.attendance.Home_Screen.getView()' on a null object reference
at com.example.user.attendance.MainActivity.onBackPressed(MainActivity.java:156)
at android.app.Activity.onKeyUp(Activity.java:2727)
at android.view.KeyEvent.dispatch(KeyEvent.java:3290)
at android.app.Activity.dispatchKeyEvent(Activity.java:2997)
at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:534)
at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:58)
at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:316)
at com.android.internal.policy.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2735)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:5391)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5344)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4790)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4843)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4809)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4950)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4817)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5007)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4790)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4843)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4809)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4817)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4790)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4843)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4809)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4983)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:5228)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2907)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2479)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2470)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2884)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:323)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:7402)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
导航抽屉中的onBackpressed工作正常,但当我在片段中并想要进入活动时,onBackpressed无效。
答案 0 :(得分:0)
不是在活动中声明导航抽屉,而是在片段本身中将其指定为公共静态 即, 在Home_screen.java中
module top #(parameter N=4) (
input clk, rst,
input signed [N-1:0] w [15:0],
output logic signed [N+5:0] y [15:0]
};
logic signed [N+2:0] x [15:0];
genvar i;
generate
for (i=0; i<=15; i=i+1) begin: pipeline_y
always_ff @ (posedge clk, posedge rst) begin
if (rst) y[i] <= 0;
else y[i] <= y_[i];
end
end
endgenerate
genvar j;
generate
for (j=0; j<=15; j=j+4) begin: my_block
block_A #(.N(N)) my_block_A(.w(w[j+3:j]),.x(x[j+3:j]),.rst(rst),.clk(clk));
end
endgenerate
并在活动
中的onBackPressed()方法中调用它 public class Home_Screen extends Fragment implements OnNavigationItemSelectedListener {
public static DrawerLayout navigation_drawer;
}