java - 测试 fragment Activity 时错误膨胀类 fragment

标签 java android android-studio android-fragments android-fragmentactivity

我正在尝试测试实现 FragmentActivity

当我尝试运行我的应用时出现错误:

Error inflating class fragment

我读过,如果您在主 Activity 中扩展 Activity 而不是 FragmentActivity,就会发生这种情况,但我继承了正确的东西 Activity 本身。 可能是什么问题?

我的 Activity :

package apps.radwin.zxingprojectfragmenttwo;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.View;

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void selectFrag(View view) {
        Fragment objFragment = new FragmentOne();
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
            .replace(R.id.fragment_Two_Id, objFragment)
            .commit();
    }
}

Activity 布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    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="apps.radwin.zxingprojectfragmenttwo.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:id="@+id/textView6" />


    <fragment
        android:id="@+id/fragment_One_Id"
        android:name="apps.radwin.zxingprojectfragmenttwo.FragmentOne"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:layout="@layout/fragment_fragment_one"
        android:layout_below="@+id/fragment_Two_Id"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />


    <fragment
        android:id="@+id/fragment_Two_Id"
        android:name="apps.radwin.zxingprojectfragmenttwo.FragmentTwo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:layout="@layout/fragment_fragment_two"
        android:layout_below="@+id/textView6"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Activity Button Change First"
        android:id="@+id/button2"
        android:onClick="selectFrag"
        android:layout_below="@+id/fragment_One_Id"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Activity Button Change Second"
        android:id="@+id/button1"
        android:onClick="selectFrag"
        android:layout_below="@+id/button2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />


</RelativeLayout>

完整堆栈跟踪:

FATAL EXCEPTION: main
Process: apps.radwin.zxingprojectfragmenttwo, PID: 23530
java.lang.RuntimeException: Unable to start activity ComponentInfo {
    apps.radwin.zxingprojectfragmenttwo / apps.radwin.zxingprojectfragmenttwo.MainActivity
}: android.view.InflateException: Binary XML file line #19: Binary XML file line # 19: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 3253)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 3349)
at android.app.ActivityThread.access$1100(ActivityThread.java: 221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java: 1794)
at android.os.Handler.dispatchMessage(Handler.java: 102)
at android.os.Looper.loop(Looper.java: 158)
at android.app.ActivityThread.main(ActivityThread.java: 7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 1120)
Caused by: android.view.InflateException: Binary XML file line #19: Binary XML file line # 19: Error inflating class fragment
at android.view.LayoutInflater.inflate(LayoutInflater.java: 551)
at android.view.LayoutInflater.inflate(LayoutInflater.java: 429)
at android.view.LayoutInflater.inflate(LayoutInflater.java: 380)
at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java: 474)
at android.app.Activity.setContentView(Activity.java: 2387)
at apps.radwin.zxingprojectfragmenttwo.MainActivity.onCreate(MainActivity.java: 15)
at android.app.Activity.performCreate(Activity.java: 6876)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1135)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 3206)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 3349) 
at android.app.ActivityThread.access$1100(ActivityThread.java: 221) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java: 1794) 
at android.os.Handler.dispatchMessage(Handler.java: 102) 
at android.os.Looper.loop(Looper.java: 158) 
at android.app.ActivityThread.main(ActivityThread.java: 7224) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 1230) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 1120) 
Caused by: android.view.InflateException: Binary XML file line #19: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:794)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:847)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810)
at android.view.LayoutInflater.inflate(LayoutInflater.java:527)
at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:380) 
at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:474) 
at android.app.Activity.setContentView(Activity.java:2387) 
at apps.radwin.zxingprojectfragmenttwo.MainActivity.onCreate(MainActivity.java:15) 
at android.app.Activity.performCreate(Activity.java:6876) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:158) 
at android.app.ActivityThread.main(ActivityThread.java:7224) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
Caused by: java.lang.RuntimeException: apps.radwin.zxingprojectfragmenttwo.MainActivity@44cf550 must implement OnFragmentInteractionListener
at apps.radwin.zxingprojectfragmenttwo.FragmentOne.onAttach(FragmentOne.java:83)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1019)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1230)
at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1332)
at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2288)
at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:120)
at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:356)
at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:31)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:79)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:766)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:847) 
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:527) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:380) 
at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:474) 
at android.app.Activity.setContentView(Activity.java:2387) 
at apps.radwin.zxingprojectfragmenttwo.MainActivity.onCreate(MainActivity.java:15) 
at android.app.Activity.performCreate(Activity.java:6876) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:158) 
at android.app.ActivityThread.main(ActivityThread.java:7224) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

我的 FragmentOne 类:

package apps.radwin.zxingprojectfragmenttwo;

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


/**
 * A simple {@link Fragment} subclass.
 * Activities that contain this fragment must implement the
 * {@link FragmentOne.OnFragmentInteractionListener} interface
 * to handle interaction events.
 * Use the {@link FragmentOne#newInstance} factory method to
 * create an instance of this fragment.
 */
public class FragmentOne extends Fragment {
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;

    private OnFragmentInteractionListener mListener;

    public FragmentOne() {
        // Required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment FragmentOne.
     */
    // TODO: Rename and change types and number of parameters
    public static FragmentOne newInstance(String param1, String param2) {
        FragmentOne fragment = new FragmentOne();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_fragment_one, container, false);
    }

    // TODO: Rename method, update argument and hook method into UI event
    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    /**
     * This interface must be implemented by activities that contain this
     * fragment to allow an interaction in this fragment to be communicated
     * to the activity and potentially other fragments contained in that
     * activity.
     * <p/>
     * See the Android Training lesson <a href=
     * "http://developer.android.com/training/basics/fragments/communicating.html"
     * >Communicating with Other Fragments</a> for more information.
     */
    public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        void onFragmentInteraction(Uri uri);
    }
}

最佳答案

问题出在您的 FragmentonAttach() 中:

if (context instanceof OnFragmentInteractionListener) {
    mListener = (OnFragmentInteractionListener) context;
} else {
    throw new RuntimeException(context.toString()
        + " must implement OnFragmentInteractionListener");
}

您正在检查 Context Fragment 是否附加到(在本例中为 MainActivity)实现 OnFragmentInteractionListener,但它没有,因此抛出 RuntimeException

根据您想要实现的目标,从您的 onAttach() 中删除上面的代码,或者让您的 Activity 实现 OnFragmentInteractionListener

关于java - 测试 fragment Activity 时错误膨胀类 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38824795/

相关文章:

android - 任务 ':app:signingConfigWriterDebug' 执行失败

java - ImageButton不可点击 - AndroidStudio

java - SimpleDateFormat 用 'Z' 文字解析日期

java - 错误 : module not found: javafx. 控制 1 错误

java - C# Little-Endian 从 Java Big-Endian 转换

android - 带 ViewPager 和 TabLayout 的抽屉导航 : Fragments not loaded properly

android - android studio中的app preDexDebug错误

android - 小部件没有出现在小部件中,因为它应该是

java - TestNG Selenium Java -- java.lang.IllegalStateException : The path to the driver executable must be set by the webdriver. chrome.driver 系统属性

java - 在饼图中隐藏小值 MPAndroidChart