简体   繁体   中英

Open activity on button click in NavigationDrawer

I have created project in Android Studio with Navigation Drawer Activity and I have successfully created it,On navigation drawer activity I have created 3 section, In 1st section I put Button and I want to setOnClickListener method on that button which lead to start new Activity (ex. "xyz.class") I have used code

startActivity(new Intent(this,xyz.class));

but "this" keyword is not working and gives me error. So, I changed code like

Context c; startActivity(new Intent(c,xyz.class));

which gives NullPointerException,

My Section1 code is

import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.example.pratik.crm50.R;
import com.gc.materialdesign.views.ButtonFloat;
public class Dashboard extends Fragment implements View.OnClickListener {
    View rootView;
    Context c;
    private ButtonFloat float_btn;
    private Button but;
    private Button btn;
    Context c;
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
        View v;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            v = inflater.inflate(R.layout.dashboard_layout,container, false);
        } else {
            v = super.onCreateView(inflater,container, savedInstanceState);
        }
      View vv=v.findViewById(R.id.button_simple);
        vv.setOnClickListener(this);
        return v;
    }
    @Override
    public void onClick(View v) {
       // Toast.makeText(c,"Float Button",Toast.LENGTH_SHORT).show();
        Log.e("ssas","sasafa");
        //startActivity(new Intent(c,xyz.class));
    }

}

and I can get successfully log Log.e("ssas","sasafa") on above code. So how to do this?

Fragment does not extend Context while the Intent constructor expects the first parameter to be exactly that.

The Context c variable is redundant because a Fragment saves the parent activity by default.

You need to use the activity (class that extends Context ) that the fragment is attached to:

startActivity(new Intent(getActivity(), xyz.class));

You get a NullPointerException , because you´re never assining a value to Context c . So as user3249477 also mentioned use the method getActivity() to assign a value to c like c=getActivity(); Or call it directly while starting the Intent. This would look like this: startActivity(new Intent(getActivity(),xyz.class));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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