关于在fragment里面使用onclick的报错解决
✅ 错误原因分析
当你在 XML 中使用 android:onClick="xxx" 时,Android 会去当前 绑定的 Activity 中找这个方法,而不是 Fragment。
即使你是在
DialogFragment的布局中设置的android:onClick,它也会去找 宿主 Activity(这里是 DawActivity) 中有没有这个方法,不会自动去找 Fragment 中的方法。
所以即使你的 SettingsFragment 中有 showAbout(View v) 方法,仍然会报错:
“Could not find a method showAbout(View) in DawActivity”
✅ 正确做法:在
DialogFragment中手动设置点击事件你应该在 onCreateView() 中手动设置点击监听器:
✅ 修改后的完整代码如下:
import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.DialogFragment; public class SettingsFragment extends DialogFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_DeviceDefault_NoActionBar_Fullscreen); } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // 加载 fragment_settings.xml 布局 View view = inflater.inflate(R.layout.fragment_settings, container, false); // 找到按钮并设置点击事件 Button btnAbout = view.findViewById(R.id.btn_about); btnAbout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showAbout(v); // 调用你已有的方法 } }); return view; } public void showAbout(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); builder.setTitle("关于此软件"); TextView about = new TextView(requireContext()); about.setText("安卓虚拟乐器动态加载技术+自研作曲软件,开发者小沙盒,小沙盒工作室开发,感谢您的使用"); builder.setView(about); builder.create(); builder.show(); } }
浙公网安备 33010602011771号