获取视图的id从片段到Activity

时间:2018-04-21 09:35:44

标签: java android android-fragments android-fragmentactivity

我有一个活动和一个片段。在片段中我有导航抽屉,我已经在活动中的导航抽屉中应用了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无效。

1 个答案:

答案 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; 
    }