Android ListActivity类型不兼容 无法调用deleteData方法排查
问题描述
开发Android Studio + Firebase的简易CRUD应用时,遇到如下编译报错:error: incompatible types: com.example.sample.ListActivity cannot be converted to android.app.ListActivity
在自定义的ListActivity.java中编写了用于删除Firebase集合数据的deleteData(int index)方法,代码如下:
public void deleteData(int index){ pd.setTitle("Deleting data..."); pd.show(); db.collection("Documents").document(modelList.get(index).getId()) .delete() .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { pd.dismiss(); Toast.makeText(ListActivity.this, "Deleted", Toast.LENGTH_SHORT); showData(); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { pd.dismiss(); Toast.makeText(ListActivity.this,e.getMessage(), Toast.LENGTH_SHORT); } }); }
当前应用新增、编辑功能运行正常,仅在CustomAdapter.java中给删除按钮绑定逻辑、调用上述deleteData方法时,IDE提示无法解析ListActivity中的该方法,适配器中相关调用代码如下:
public void onItemLongClick(View view, int position) { AlertDialog.Builder builder = new AlertDialog.Builder(listActivity); String[] options = {"Update/Print", "Delete"}; builder.setItems(options, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if ( which == 0){ String id = modelList.get(position).getId(); String title = modelList.get(position).getTitle(); String description = modelList.get(position).getDescription(); Intent intent = new Intent(listActivity, MainActivity.class); intent.putExtra("pId",id); intent.putExtra("pTitle",title); intent.putExtra("pDescription",description); listActivity.startActivity(intent); } if (which ==1){ listActivity.deleteData(position); } } }).create().show(); }
问题原因
核心是同名类导入/声明错误:
你在CustomAdapter中用来持有页面引用的listActivity变量,类型被声明为Android SDK内置的android.app.ListActivity(系统提供的列表Activity基类),而非你自己在项目包下编写的com.example.sample.ListActivity。
系统内置的ListActivity类没有你自定义的deleteData方法,所以会同时触发两个异常:
- 编译阶段报类型不匹配,无法将你自定义的ListActivity转换为系统的ListActivity
- 代码提示阶段找不到
deleteData方法
修复步骤
- 打开
CustomAdapter.java,检查顶部import区域,删除import android.app.ListActivity;这行系统类的导入 - 添加你自己实现的ListActivity类的导入:
import com.example.sample.ListActivity; - 检查
listActivity成员变量的类型声明,确认类型为你自己项目包下的ListActivity - 额外修复代码疏漏:你写的
deleteData方法中两处Toast都没有调用.show()方法,执行时不会弹出提示,需要补全,例如:
// 成功提示 Toast.makeText(ListActivity.this, "Deleted", Toast.LENGTH_SHORT).show(); // 失败提示 Toast.makeText(ListActivity.this,e.getMessage(), Toast.LENGTH_SHORT).show();
内容的提问来源于stack exchange,提问作者niiro kun
相关产品推荐
相关产品推荐

