So I want an intent to start an Activity that simply brings up a dialog popup box telling the user how to use the app.
I have the code:
private final View.OnClickListener btnClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.about_box:
Intent i = new Intent(this, About.class);
startActivity(i);
break;
}
}
}
but the Intent is giving me the error:
The constructor Intent(new View.OnClickListener(){}, Class) is
undefined
Any idea on workarounds?
Thanks.
The problem is that you are inside another class there and are passing the Intent a wrong context. You have to pass it the right context. Take a look at the example below.
// your Activity
public class MyActivity extends Activity {
Context ctx = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ctx = getApplication();
}
private final View.OnClickListener btnClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.about_box:
Intent i = new Intent(ctx, About.class);
startActivity(i);
break;
}
}
}
Change,
Intent i = new Intent(this, About.class);
to,
Intent i = new Intent(TheCurrentClassName.this, About.class);
Change the intent line to: Intent intent = new Intent(ClassName.this, theNewClassName.class);
The intent needs a context. However, using the this shortcut in the onClick function is not properly resolved. Different ways to provide current context in an anonymous inner class are
- Use Context.this instead of this.
- Use getApplicationContext() instead of this.
- Explicitly use the class name MenuScreen.this.
Call a function that is declared at the right context level.
Just change
Intent i = new Intent(this, About.class);
to
Intent i = new Intent(Classname.this, About.class);
Hope it works.