Error using onClickListener (Intent)

2019-01-18 22:46发布

问题:

Well, I'm trying to create an intent on a "login.java" the code is :

 Button btEntrar = (Button) findViewById(R.id.btnSingIn);
    btEntrar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i;
            i = new Intent(this, MainActivity.class);
            startActivity(i);


        }
    });

But it says that I can't go to the other activity saying this :

Error:(24, 21) error: no suitable constructor found for Intent(,Class) constructor Intent.Intent(String,Uri) is not applicable (argument mismatch; cannot be converted to String) constructor Intent.Intent(Context,Class) is not applicable (argument mismatch; cannot be converted to Context)

and...

Error:Execution failed for task ':app:compileDebugJava'. Compilation failed; see the compiler error output for details.

回答1:

Just a few lines to explain the reason why this does not work in:

i = new Intent(this, MainActivity.class)

The intent is created inside another class, here an anonymous inner class OnClickListener. Thus this does not refer the instance of your Activity (or Context) as intended but the instance of your anonymous inner class OnClickListener.

So you should provide the correct context of your class.

i = new Intent(YourClassName.this, MainActivity.class)


回答2:

use if you want to send it from login.java to mainactivity.class use

 Intent intent=new Intent(login.this,Mainactivity.class);
startActivity(intent);


回答3:

updated code in to your activity

Button btEntrar = (Button) findViewById(R.id.btnSingIn);
 btEntrar.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent i;
        i = new Intent(login.this, MainActivity.class);
        startActivity(i);


    }
});


回答4:

try using

Intent i = new Intent(login.this, mainActivity.class);

hope this helps



回答5:

Did you add manifest.xml or try this code ?
Intent i = new Intent(login.this,mainActivity.class);