【问题标题】:Android error when opening new activity from listview从列表视图打开新活动时出现 Android 错误
【发布时间】:2016-10-01 21:01:56
【问题描述】:

我是 android 开发的新手,我尝试从列表视图打开一个新活动,而不是从列表视图接收数据。 当我点击列表视图项目时,我总是得到以下错误代码:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: development.wrabel.sunshine, PID: 2420
              java.lang.RuntimeException: Unable to start activity ComponentInfo{development.wrabel.sunshine/development.wrabel.sunshine.DetailActivity}: android.view.InflateException: Binary XML file line #1: Binary XML file line #1: Error inflating class fragment
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                  at android.app.ActivityThread.-wrap12(ActivityThread.java)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6077)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
               Caused by: android.view.InflateException: Binary XML file line #1: Binary XML file line #1: Error inflating class fragment
               Caused by: android.view.InflateException: Binary XML file line #1: Error inflating class fragment
               Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment development.wrabel.sunshine.DetailActivityFragment: make sure class name exists, is public, and has an empty constructor that is public
                  at android.app.Fragment.instantiate(Fragment.java:629)
                  at android.app.Fragment.instantiate(Fragment.java:593)
                  at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2302)
                  at android.app.FragmentController.onCreateView(FragmentController.java:98)
                  at android.app.Activity.onCreateView(Activity.java:5884)
                  at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:36)
                  at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:75)
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:777)
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
                  at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284)
                  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
                  at development.wrabel.sunshine.DetailActivity.onCreate(DetailActivity.java:21)
                  at android.app.Activity.performCreate(Activity.java:6664)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                  at android.app.ActivityThread.-wrap12(ActivityThread.java)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6077)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
               Caused by: java.lang.ClassNotFoundException: Didn't find class "development.wrabel.sunshine.DetailActivityFragment" on path: DexPathList[[zip file "/data/app/development.wrabel.sunshine-1/base.apk"],nativeLibraryDirectories=[/data/app/development.wrabel.sunshine-1/lib/x86, /system/lib, /vendor/lib]]
                  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
                  at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
                  at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
                  at android.app.Fragment.instantiate(Fragment.java:615)
                  at android.app.Fragment.instantiate(Fragment.java:593) 
                  at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2302) 
                  at android.app.FragmentController.onCreateView(FragmentController.java:98) 
                  at android.app.Activity.onCreateView(Activity.java:5884) 
                  at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:36) 
                  at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:75) 
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:777) 
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:377) 
                  at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284) 
                  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
                  at development.wrabel.sunshine.DetailActivity.onCreate(DetailActivity.java:21) 
                  at android.app.Activity.performCreate(Activity.java:6664) 
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
                  at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:154) 
                  at android.app.ActivityThread.main(ActivityThread.java:6077) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

这是主要活动的代码: listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
            String forecast = mForecastAdapter.getItem(position);
            Intent intent = new Intent(getActivity(), DetailActivity.class)
                    .putExtra(Intent.EXTRA_TEXT, forecast);
            startActivity(intent);
        }
    });

请帮我解决问题,在此先感谢!

更新 - 这是来自 Android Manifest 的代码:

<activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="development.wrabel.sunshine.DetailActivity"
        android:label="@string/title_activity_detail"
        android:parentActivityName="development.wrabel.sunshine.MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="development.wrabel.sunshine.MainActivity" />
    </activity>

更新 - 这里是 Detail Activity java 和 xml

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail);
    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new DetailFragment())
                .commit();
    }
}

public static class DetailFragment extends Fragment {

    public DetailFragment() {
        setHasOptionsMenu(true);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_detail, container, false);

        // The detail Activity called via intent.  Inspect the intent for forecast data.
        Intent intent = getActivity().getIntent();
        if (intent != null && intent.hasExtra(Intent.EXTRA_TEXT)) {
            mForecastStr = intent.getStringExtra(Intent.EXTRA_TEXT);
            ((TextView) rootView.findViewById(R.id.detailText))
                    .setText(mForecastStr);
        }

        return rootView;
    }

这里是xml

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:name="development.example.sunshine.DetailActivity"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout="@layout/fragment_detail" />

以及片段的xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="development.wrabel.sunshine.DetailActivity">
<TextView
    android:text="TextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/detailText" />

【问题讨论】:

  • 清单中是否列出了您的第二个活动?
  • 感谢您的回答,我刚刚更新了我的问题并添加了清单中的代码,我还列出了第二个活动(DetailActivity)
  • 为Detail Activity共享xml和Java代码
  • 看起来您在使用 DetailsActivityFragment 时遇到了一些问题,您可能正试图在 DetailsActivityonCreate() 方法中的某个地方创建这些问题。

标签: android listview android-activity


【解决方案1】:
           Caused by: android.app.Fragment$InstantiationException: 
           Unable to instantiate fragment development.wrabel.sunshine.DetailActivityFragment: 
           make sure class name exists, is public, and has an empty constructor that is public

根据您提供的代码,您的片段类的名称是 DetailActivity。但是有些方式,您的代码在某处尝试访问 DetailActivityFragment。

干杯!

【讨论】:

  • 谢谢,我发现了问题,我把detailActivityFragment和DetailActivity类一起移动了,忘记在每个地方都改了,谢谢你的帮助
  • @Florian,随时
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 2021-02-14
相关资源
最近更新 更多