当前位置: 首页 > 知识库问答 >
问题:

ContextThemeWrapper不能在AppCompatActivity中强制转换

景靖琪
2023-03-14
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;

    }

共有1个答案

段渊
2023-03-14

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

  • 既然您只显式地需要活动,为什么不通过调用接口发送活动呢?
  • 如果明天这将被更改,并且视图将有其他上下文怎么办?
/**
 * 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;
}

编辑:回调到活动的代码段

public interface MyAdapterListener {
        void onPlaceClick();
    }
public BookingActivityAdapter(MyAdapterListener myAdapterListener){
        this.myAdapterListener = myAdapterListener;
}
holder.ivPlace.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                myAdapterListener.onPlaceClick();

            }
        });
 类似资料: