Android技术求助:无法解析show(android.app.FragmentTrasanction, java.lang.String)方法
「Cannot resolve method 'show(android.app.FragmentTrasanction, java.lang.String)'」错误分析与修复
一、最直接的拼写问题
你报错信息里的FragmentTrasanction是明显的拼写错误!正确的类名应该是FragmentTransaction(注意中间是Transaction,多了一个c),这个拼写错误会导致编译器无法识别正确的类类型,自然找不到对应的show方法。
二、Fragment库版本不匹配
你的主类继承的是android.support.v7.app.AppCompatActivity,属于support兼容库,但你导入的却是原生系统的android.app.FragmentTransaction。如果你的dialog是android.support.v4.app.DialogFragment(兼容库的对话框碎片),它的show()方法需要的是兼容库的FragmentTransaction(也就是android.support.v4.app.FragmentTransaction),而非原生的,类型不匹配就会触发这个找不到方法的错误。
三、一步步修复问题
- 先修正拼写错误:把代码里所有的
FragmentTrasanction替换成正确的FragmentTransaction,这是最基础的一步。 - 统一Fragment库的导入:
把当前的import android.app.FragmentTransaction;替换成import android.support.v4.app.FragmentTransaction;,确保和AppCompatActivity使用的兼容库版本一致。同时确认你的自定义对话框碎片(比如DatePicker相关的)继承的是android.support.v4.app.DialogFragment,而不是原生的android.app.DialogFragment。 - 正确获取事务实例:在AppCompatActivity中,要通过
getSupportFragmentManager().beginTransaction()获取兼容库的FragmentTransaction,而不是getFragmentManager()(后者是获取原生系统的事务)。
给你一个正确的代码示例参考:
import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v4.app.DialogFragment; public class YourMainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); // 假设这是你的日期选择对话框实例 DialogFragment datePickerDialog = new YourDatePickerDialog(); // 正确调用show方法 datePickerDialog.show(getSupportFragmentManager().beginTransaction(), "DatePicker"); } }
另外还有个更简便的写法:DialogFragment的show方法支持直接传入FragmentManager和tag,内部会自动处理事务,代码更简洁:
datePickerDialog.show(getSupportFragmentManager(), "DatePicker");
内容的提问来源于stack exchange,提问作者pritesh shahare
相关产品推荐
相关产品推荐

