java - 实现一个将覆盖 onClick() 的类
问题描述
我想创建一个方法,当在其他类中实现时,你只需要传递一些参数,然后调用-onclick() 函数来设置元素。
目前,我刚刚做到了这一点。但这给了我一个 RunTimeException
无法启动活动 ComponentInfo{com.example.test/com.example.testActivity.MainActivity}:java.lang.NullPointerException:尝试调用虚拟方法 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()'在空对象引用上
我的代码:
类:可点击
imports ...
public class ClickeableOptions implements View.OnClickListener{
private CardView cardView;
private Context cont;
private Class actTarget;
public OpcionesMainClickeables() {}
public ClickeableOptions(CardView cardView, Context cont, Class actTarget) {
this.cardView = cardView;
this.cont = cont;
this.actTarget= actTarget;
}
//Getters and Setters
@Override
public void onClick(View v) {
getCardView().setOnClickListener(this);
Intent intent = new Intent(this.getCont(), this.getActTarget());
startActivity(intent);
}
}
我想像这样实现这个类......
public class MainActivity extends AppCompatActivity{
private CardView cvRegistration;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cvRegistration = (CardView) findViewById(R.id.cvRegistration);
ClickeableOptions optionRegistration = new ClickeableOptions(
cvRegistration, this, Registration.class
);
optionRegistration.onClick(optionRegistration.getCardView());
}
我已经在同一个文件中实现了该方法,但我想这样做以使事情更整洁。我认为问题在于使用this
,但我真的不明白
解决方案
虽然您已经实例化了 ClickeableOptions(从 Activity 派生)对象,但它的任何 Activity 生命周期方法都没有被调用,也没有完成与超类实例化相关的工作(通常应该在 onCreate 中完成)。因此 ActivityThread 只是 null 并且您在调用时遇到了异常
startActivity(intent);
如果您想在
CardView
单击时开始另一个活动,那么您需要- 听从 Leo Leontev 的建议:打电话
getCont().startActivity(intent)
而不是startActivity(intent)
- 将该行移动
getCardView().setOnClickListener(this)
到ClickeableOptions
自定义构造函数的最底线 MainActivity$onCreate()
从您的方法 中删除此行:optionRegistration.onClick(optionRegistration.getCardView());
- 听从 Leo Leontev 的建议:打电话
完成上述所有操作后,您将能够在点击事件上开始新的活动。
推荐阅读
- laravel - Laravel Vue Router 返回 404 页面
- regex - AWK:处理多个分隔符标准的优雅方式
- mysql - NodeJS MySQL Client 不支持认证协议
- google-bigquery - 从 AdWords 到 BigQuery 的 Google 转移服务
- java - 使用隐式参数字符串转换创建方法
- android - 取消选中 ExpandableListView 组中的所有 CheckedTextView
- android - onStart() 或 onPause() 返回后,Activity 是否处于暂停状态?
- c# - 文件控件未在编辑页面中初始化 - 剃须刀页面
- .htaccess - 主页的 Htaccess 404 问题
- algorithm - RFID/NFC序列号用什么方法生成号码