我正在开发一些应用程序,在启动器屏幕中,如果我们检查一个单选按钮,它应该重定向到登录活动。
在mainactivity.java
类中,在为Implicit Intent类创建对象期间,使用this
关键字获取当前上下文时显示错误。这是什么原因?我们还可以使用什么来获取Intent对象的上下文?
我在这里包含我的代码。
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final RadioGroup radiogroup = (RadioGroup) findViewById(R.id.radiogroup);
radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
{
RadioButton checkedRadioButton = (RadioButton) findViewById(checkedId);
int comp = checkedRadioButton.getId();
if(comp==(R.id.Vitbutton))
Intent i = new Intent(this ,LoginActivity.class);
startActivity(i);
}
}
);
}
答案 0 :(得分:3)
变化:
Intent i = new Intent(this ,LoginActivity.class);
为:
Intent i = new Intent(MainActivity.this ,LoginActivity.class);
答案 1 :(得分:0)
您可以使用getApplicationContext()
Intent i = new Intent(getApplicationContext(),LoginActivity.class);
startActivity(i);
答案 2 :(得分:0)
所以你得到了一些关于在我面前做得更好的建议。但我想让你明白错误:
首先:当你将鼠标悬停在错误上时,你是否检查了Eclipse或AS的内容?它应该说“Intent类的构造函数不适用于与RadioGroup.OnCheckedChangeListener对象一起使用”
请记住,你在一个类定义中,“this”指的是你当前所在范围的类。那就是“RadioGroup.OnCheckedChangeListener” - 类
你可以通过Java中的“MainActivity.this”获得外部类实例的“this”引用
迎接
答案 3 :(得分:0)
这个用于引用这个被写入的对象。
您尝试在RadioGroup.OnCheckedChangeListener()接口的onCheckedChanged中创建新的Intent。
现在,您使用的costructor是Intent(Context packageContext,Class cls)但是当您在onCheckedChanged中使用 this 时,您正在引用该接口而不是包含它的Activity,为此你看到错误的原因。
因此,在这种情况下,您可以使用this.getApplicationContext()或this.getBaseContext()
答案 4 :(得分:0)
当您在匿名类中使用它时,您将获得该匿名类的引用,而不是主类的引用。
在这种情况下,当您使用“this”时,您将获得RadioGroup.OnCheckedChangeListener的参考,而不是MainActivity的参考(并且Intent需要MainActivity的参考)。
所以你可以用这种方式解决它:
Intent i = new Intent(MainActivity.this,LoginActivity.class);
问候。