android - ContextThemeWrapper 无法在 AppCompatActivity 中进行强制转换

标签 android fragment adapter

无法解决为::java.lang.ClassCastException: android.view.ContextThemeWrapper 无法转换为 androidx.appcompat.app.AppCompatActivity。
浏览了各个网站但无法解决我的问题。

holder.ivPlace.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                AppCompatActivity activity = (AppCompatActivity) v.getContext();
                Fragment myFragment = new BookingDetailsFragment();
                activity.getSupportFragmentManager().beginTransaction().replace(R.id.bookingFragment, myFragment)
                        .addToBackStack(null).commit();



            }
        });

布局是这样膨胀的::

@NonNull
    @Override
    public BookingActivityAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_booking_data, parent, false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;

    }

最佳答案

我认为您可以使用以下代码 fragment 来解决您的问题。但我建议您不要这样做,主要有两个原因。

  • 既然您明确只需要 Activity,为什么不将其发送出去,甚至更好地实现一个回调接口(interface)。
  • 如果明天这将发生更改,并且 View 将有其他上下文怎么办?
/**
 * Get activity instance from desired context.
 */
public static Activity getActivity(Context context) {
    if (context == null) return null;
    if (context instanceof Activity) return (Activity) context;
    if (context instanceof ContextWrapper) return getActivity(((ContextWrapper)context).getBaseContext());
    return null;
}

编辑: Activity 回调的 fragment

public interface MyAdapterListener {
        void onPlaceClick();
    }

然后当您创建适配器的实例时,您可以像这样传递它

public BookingActivityAdapter(MyAdapterListener myAdapterListener){
        this.myAdapterListener = myAdapterListener;
}

请务必在您的 Activity 中实现此接口(interface)。最后,在您的 onClick 中,您可以按如下方式使用此界面

holder.ivPlace.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                myAdapterListener.onPlaceClick();

            }
        });

关于android - ContextThemeWrapper 无法在 AppCompatActivity 中进行强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67867914/

相关文章:

java - Android 计时器在取消时崩溃

fragment - SAPUI5 我的片段被关闭

java - 仅限制对必要的数据类访问器/ getter 的访问

android - 为什么recyclerview android中两行(消息)之间有这么多空间

android - setMultiChoiceItems 对话框中的图标 - Android

android - 使用 OnTouch 事件在 Canvas 中选择和放置不同的形状

android - 一个项目中的多个应用程序类

android - Android:首次从命令行运行应用

android - 如何在按下单个 fragment 的手动后退按钮时返回上一个 fragment ?

android - 线性布局不能填满整个屏幕