如何在单独Java类的OnClick()方法中实现startActivity()?
所以我制作了3个java文件如何在单独Java类的OnClick()方法中实现startActivity()?,java,android,android-intent,onclicklistener,Java,Android,Android Intent,Onclicklistener,所以我制作了3个java文件 主要活动课 java(单独的java类) 目的性活动类(活动) 我在ButtonListener.java文件中实现了OnclickListener和OnClick方法 我想在ButtonListener文件的onClick(视图v)中启动intent startActivity()。但它在startActivity()行上抛出了错误 我知道我可以在AvtivityClass的onCreate下创建OnClick方法,但我不想这样做,因为我已经创建了一个单独的jav
public class MainActivity extends AppCompatActivity {
public Button intentPurple;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentPurple=findViewById(R.id.button5);
Intent gg= new Intent(MainActivity.this, PurpleActivty.class);
ButtonListener B= new ButtonListener(gg);
intentPurple.setOnClickListener(B);
}
}
public class ButtonListener implements View.OnClickListener {
private Intent g;
public ButtonListener(Intent F) {
this.g=F;
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.button5:
startActivity(g); // this line is error(red underline g) error msg
break; //is "startActivity() in ContextCompat cannot be
//applied to"
}}}
文件按钮Listener.java
public class MainActivity extends AppCompatActivity {
public Button intentPurple;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentPurple=findViewById(R.id.button5);
Intent gg= new Intent(MainActivity.this, PurpleActivty.class);
ButtonListener B= new ButtonListener(gg);
intentPurple.setOnClickListener(B);
}
}
public class ButtonListener implements View.OnClickListener {
private Intent g;
public ButtonListener(Intent F) {
this.g=F;
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.button5:
startActivity(g); // this line is error(red underline g) error msg
break; //is "startActivity() in ContextCompat cannot be
//applied to"
}}}
有办法解决这个问题吗?我相信
public ButtonListener(Intent F) {
this.g=F;
}
您不必使用这个,因为变量名是不同的。
除此之外,我相信
Intent gg= new Intent(**MainActivity.this**, PurpleActivty.class);
MainActivity。这会导致问题,因为您在不同的类中,您也应该将MainActivity的上下文作为参数传递,并使用
context.startActivity(g);
或
您需要从活动的上下文调用
startActivity
,而不是从自定义处理程序类调用。将按钮列表器重构为:
public class ButtonListener implements View.OnClickListener {
private Intent g;
private Context caller;
public ButtonListener(Intent f, Context caller) {
this.g = f;
this.caller = caller;
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.button5:
caller.startActivity(g);
break;
}
}
}
然后像这样给你的听众打电话:
intentPurple = findViewById(R.id.button5);
Intent gg = new Intent(MainActivity.this, PurpleActivty.class);
ButtonListener b = new ButtonListener(gg, MainActivity.this);
intentPurple.setOnClickListener(b);
public ButtonListener(Intent F)将Intent obj值传递到public ButtonListener的构造函数中,而不传递该值ButtonListener将无法获取Intent obj值以启动Startactivity(obj)上下文。Startactivity(openThree)。。。你所说的openThree是什么意思?我说的“你不必使用它”并不是说你不必使用构造函数,而是说它本身就是一个关键字。谢谢你的帮助,你会建议为ActivityStart()创建一个单独的类吗;或者我应该在mainActivity类的oncreate方法中声明它吗?我的意思是我仍然可以在onCreate中创建onClickListenermethod@EslaBaeny不知道你在问什么。你可能想提出一个新问题。