所以我制作了三个 3 个 java 文件。
我在 ButtonListener.java 文件中实现了 OnclickListener 和 OnClick 方法。
我想在 ButtonListener 文件的 onClick(View v) 中启动意图 startActivity()。但它在 startActivity() 行上抛出错误。
我知道我可以在 AvtivityClass 的 onCreate 下创建 OnClick 方法,但我不想这样做,因为我已经创建了一个可以处理所有按钮侦听器的单独 java 文件。
文件 MainActivity.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);
}
}
文件 ButtonListener.java
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"
}}}
有什么办法可以解决这个问题?
您需要startActivity
从活动的上下文中调用,而不是从自定义处理程序类中调用。重构ButtonListener
为:
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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句