【问题标题】:Call Fragment Activity error Unable to instantiate activity. cannot be cast to android.app.Activity调用片段活动错误无法实例化活动。无法转换为 android.app.Activity
【发布时间】:2020-08-11 18:44:20
【问题描述】:

我需要帮助,对于在 recyclerview 上单击并打开新的片段活动,我在项目列表中单击关闭应用程序和 logcat 错误是:无法实例化活动 ComponentInfo{com.example.divemex/com.example.works.Pem}: java.lang.ClassCastException:com.example.works.Pem 无法转换为 android.app.Activity

我的代码适配器:

@Override
    public void onBindViewHolder(final tramoView tramoView, final int i) {
        final TramoModel tramoModel = tramoList.get(i);
        tramoView.txtnombreMostrar.setText(tramoModel.getTramoName());
        tramoView.txtnombreMostrar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               Intent intent =  new Intent(v.getContext(), Pem.class);
                v.getContext().startActivity(intent);
            } });
    }

我的代码类片段:

public class Pem extends  Fragment {

    private TabAdapter adapter;
    private TabLayout tableLayout;
    private ViewPager viewPager;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.tabs, container, false);

        viewPager = view.findViewById(R.id.request_orders_view_pager);
        tableLayout = view.findViewById(R.id.request_orders_tabs);

        adapter = new TabAdapter(getFragmentManager());
       // adapter = new TabAdapter(FragmentActivity.getSupportFragmentManager());
        adapter.addFragment(new fragment1(), "Tab 1");
        adapter.addFragment(new fragment2(), "Tab 2");
        adapter.addFragment(new fragment3(), "Tab 3");
        adapter.addFragment(new fragment4(), "Tab 4");

        viewPager.setAdapter(adapter);
        tableLayout.setupWithViewPager(viewPager);

        return view;
    }
}

错误:

Error

【问题讨论】:

    标签: java android android-studio fragment adapter


    【解决方案1】:

    您正在尝试处理诸如活动之类的片段。 Intents 的目的之一是开始新的活动,而不是片段。

    您在下面的代码行中遇到异常,因为您使用Intent 来启动Fragment(因为Pem.class 是一个片段);并且片段不能以这种方式开始。

    Intent intent =  new Intent(v.getContext(), Pem.class);
    

    这在你得到的异常中很明显 java.lang.ClassCastException: com.example.works.Pem 无法转换为 android.app.Activity

    这表示不允许将 Pem.class 强制转换为 Activity;那是因为它没有扩展 Activity 类或其任何子类。

    要解决这个问题,可以:

    1. 通过扩展 AppCompatActivity 类使 Pem.class 成为 Activity (或任何活动类),并替换活动的回调方法 而不是片段。
    2. 或者在当前activity和here进行fragment transaction 可以找到详情

    【讨论】:

      【解决方案2】:

      你使用这个: Intent 意图 = new Intent(v.getContext(), Pem.class); v.getContext().startActivity(intent);

      但是PemFragment,而不是Activity

      【讨论】:

      • 你想跳转哪个XXXActivity,第二个参数就是XXXActivity.class
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      相关资源
      最近更新 更多