【问题标题】:Fragment cannot be cast to android.app.Activity (private case)Fragment 不能强制转换为 android.app.Activity(私人案例)
【发布时间】:2018-07-13 11:13:06
【问题描述】:

美好的一天!请具体帮助我处理我的情况。我已阅读有关此问题的解决方案,但我不知道如何将其应用于自己。

07-13 18:55:28.339 3850-3850/com.zheil.zodiac E/AndroidRuntime: FATAL EXCEPTION: main 进程:com.zheil.zodiac,PID:3850 java.lang.RuntimeException:无法实例化活动 ComponentInfo{com.zheil.zodiac/com.zheil.zodiac.FirstFragment}: java.lang.ClassCastException: com.zheil.zodiac.FirstFragment 不能 投射到 android.app.Activity 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2608) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767) 在 android.app.ActivityThread.-wrap12(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1514) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:163) 在 android.app.ActivityThread.main(ActivityThread.java:6221) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) 原因:java.lang.ClassCastException: com.zheil.zodiac.FirstFragment 无法转换为 android.app.Activity 在 android.app.Instrumentation.newActivity(Instrumentation.java:1079) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2598) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767) 在 android.app.ActivityThread.-wrap12(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1514) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:163) 在 android.app.ActivityThread.main(ActivityThread.java:6221) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)

片段:

package com.zheil.zodiac;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class FirstFragment extends Fragment {
    private TextView textView2;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_first, container, false);
        textView2 = (TextView) view.findViewById(R.id.textView2);
        String textFromActivity = getArguments().getString("1");
        textView2.setText(textFromActivity);

        return view;
    }
}

主要活动部分代码:

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Создадим новый фрагмент
        Fragment fragment = null;
        Class fragmentClass = null;

        // Handle navigation view item clicks here.
        int id = item.getItemId();

        switch (id) {
            case R.id.nav_camera:
                // Handle the camera action
                fragmentClass = FirstFragment.class;
                break;
            case R.id.nav_gallery:
                fragmentClass = SecondFragment.class;
                break;
            case R.id.nav_slideshow:

                break;
            case R.id.nav_manage:

                break;
            case R.id.nav_share:

                break;
        }

        try {
            assert fragmentClass != null;
            fragment = (Fragment) fragmentClass.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Вставляем фрагмент, заменяя текущий фрагмент
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
        // Выделяем выбранный пункт меню в шторке
        item.setChecked(true);
        // Выводим выбранный пункт в заголовке
        setTitle(item.getTitle());

        Bundle bundle = new Bundle();
        bundle.putString("1", String.valueOf(getMapLastIntent().get("aries")));
        fragment.setArguments(bundle);

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}

【问题讨论】:

标签: java android android-activity fragment classcastexception


【解决方案1】:

不需要创建Class 的实例和类型转换,只需这样做

  @SuppressWarnings("StatementWithEmptyBody")
        @Override
        public boolean onNavigationItemSelected(MenuItem item) {          
            Fragment fragment = null;    
            int id = item.getItemId();    
            switch (id) {
                case R.id.nav_camera:                    
                    fragment = new FirstFragment();
                    break;
                case R.id.nav_gallery:
                    fragment = SecondFragment();
                    break;
                case R.id.nav_slideshow:

                    break;
                case R.id.nav_manage:

                    break;
                case R.id.nav_share:

                    break;
            }                                
            FragmentManager fragmentManager = getSupportFragmentManager();
            Bundle bundle = new Bundle();
            bundle.putString("1",String.valueOf(getMapLastIntent().get("aries")));
            fragment.setArguments(bundle);
            fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();       
            item.setChecked(true);        
            setTitle(item.getTitle());

            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            drawer.closeDrawer(GravityCompat.START);
            return true;
        }
    }

【讨论】:

  • 不同的信息会传输到我的片段中,包括个别的静态信息。我想使用类
  • 你可以通过 bundle 传递或者在你的片段类中创建静态方法。
  • 在这种情况下如何定义布局格式?我的意思是传输数据的设计
  • 你犯了一个愚蠢的错误,你在片段转换之后通过捆绑将值放入片段中,在片段转换之前放入值,看看更新的代码。
【解决方案2】:

请在您的片段类中添加实例

 public static YourFragment newInstance() {
        return new YourFragment();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 2017-04-26
    • 1970-01-01
    • 2015-09-03
    • 2019-06-09
    相关资源
    最近更新 更多