报错信息如下
界面是这个样子
长按childitem 弹出删除的dialog 这是一个资料汇总的activity包含4个fragment
dialog单独写了一个类
public class MyDialog extends Dialog implements android.view.View.OnClickListener{
Context context;
IOnClickListener iOnclicklistener;
private TextView delete;
private String TAG="com.littletalent.activity.SumFile.MyDialog";
public MyDialog(Context context, int theme) {
super(context, theme);
this.context = context;
Log.i(TAG,"context="+context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialogxml);
delete = (TextView) findViewById(R.id.delete);
delete.setOnClickListener(this);
}
// 直接在这里面写的话就必须要将那些参数传进来,增加这个自定义控件的负担
@Override
public void onClick(View v) {
//Log.i(TAG, "context="+context);
//try{
iOnclicklistener = (IOnClickListener)context;
//}
// catch(Exception e){
// Log.i(TAG, "error");
// }
switch (v.getId()) {
case R.id.delete:
//iOnclicklistener.deleteOnClick();
break;
default:
Log.i(TAG,"error");
break;
}
}
public interface IOnClickListener {
public void deleteOnClick();
}
}
报错的是这句
IOnClickListener的实现是在fragment中
原因很明朗,虽然我没有你的完整代码,但是我做了个小测试,得到了类似的crash:
原因是你传入的context,也就是
SumFileActivity
,并没有实现你定义的IOnClickListener
. 所以无法强制转型。既然你在Fragment中实现了接口,那我们可以这样做,注册一个接口,替代传入context的办法:
然后还需要做的事件就是,在创建MyDialog的Fragment里面调用
setOnClickListener
.PS: 你可以看下这个问题【什么是回调函数?一个类中的回调函数是什么作用】中我的答案,可能会对你理解 “如何处理点击事件的回调” 有所帮助。
PS+: crash log,我觉得贴文本比图好,经过markdown排版后也会好看,同时也方便答题者引用其中的内容。代码也是,你可以加上注释,指明崩溃在哪行。