0

嗨,当我运行应用程序时,我正在创建静态 callLogfragment,但出现错误。看到我的代码得到 android.view.InflateException: Binary XML file line #7: Error inflating class fragment exception in catlog ,如何解决这个错误

  //CALL LOGS MAINActivity class

    public class FragmentCallLogActivity extends Activity {

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

    }

    /// main XML file

    <LinearLayout 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:orientation="vertical" >

        <fragment
            android:id="@+id/call_log_fragment"
            android:name="com.exmple.fragmnetcalllogs.CallLogsFragment"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

    </LinearLayout>

    //Call Log Fragment class 

    public class CallLogsFragment extends Fragment {

        private List<CallLogModel> callLogModelList;
        private CallLogModel callLogModel;
        private ListView callLogListView;
        private CallLogsArrayAdapter customAdapter;

        @TargetApi(Build.VERSION_CODES.HONEYCOMB)
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {

            View callLogsmanagerView = inflater.inflate(
                    R.layout.fragment_call_history, container, false);
            callLogListView = (ListView) container
                    .findViewById(R.id.call_logs_history);

            return callLogsmanagerView;
        }

        @Override
            public void onStart() {
            super.onStart();

            // creating ArrayList Object
            callLogModelList = new ArrayList<CallLogModel>();

            // calling fetchCallLogs method
            fetchCallLogs();

            // creating custom adapter
            customAdapter = new CallLogsArrayAdapter(getActivity(),
                    R.id.call_logs_history, callLogModelList);

            // setting values in to list view
            callLogListView.setAdapter(customAdapter);
        }

        // reading call logs from contentReslover
        @TargetApi(Build.VERSION_CODES.HONEYCOMB)
        public void fetchCallLogs() {

            Cursor callLog = getActivity().getContentResolver().query(
                    CallLog.Calls.CONTENT_URI, null, null, null,
                    android.provider.CallLog.Calls.DATE + " DESC");

            int cid = callLog.getColumnIndex(CallLog.Calls._ID);

            int cName = callLog.getColumnIndex(CallLog.Calls.CACHED_NAME);

            int cNumber = callLog.getColumnIndex(CallLog.Calls.NUMBER);

            int cType = callLog.getColumnIndex(CallLog.Calls.TYPE);

            int cDate = callLog.getColumnIndex(CallLog.Calls.DATE);

            int cDuration = callLog.getColumnIndex(CallLog.Calls.DURATION);

            // looping call log cursor object
            while (callLog.moveToNext()) {

                String mId = callLog.getString(cid);

                String mName = callLog.getString(cName);
                String mNumber = callLog.getString(cNumber);

                long mCallDate = callLog.getLong(cDate);

                long currentDate = System.currentTimeMillis();

                String dateString = getDateTime(mCallDate, currentDate);

                String mCallDuration = callLog.getString(cDuration);

                if (mName == null) {
                    mName = " Unknown";
                }
                if (mNumber == null) {
                    mNumber = "No Number";
                }

                int type = 0;
                switch (cType) {
                case CallLog.Calls.OUTGOING_TYPE:
                    type = R.drawable.log_out;
                    break;

                case CallLog.Calls.INCOMING_TYPE:
                    type = R.drawable.log_in;
                    break;

                case CallLog.Calls.MISSED_TYPE:
                    type = R.drawable.log_miss;
                    break;
                }
                Bitmap cPhoto = getContactImage(mNumber);

                callLogModel = new CallLogModel(mId, mName, mNumber, mCallDuration,
                        dateString, type, cPhoto);

                callLogModelList.add(callLogModel);

            }

            callLog.close();

        }

        // calculate difference between date and time
        @SuppressWarnings("deprecation")
        private String getDateTime(long callDate, long currentDate) {
            // creating String Buffer Class object
            StringBuffer tempDate = new StringBuffer();

            // Calculate difference in milliseconds
            long day = currentDate - callDate;

            if ((day / 1000) < 60) {
                tempDate.append(day / 1000).append(" Secs Ago");

            } else if ((day / (60 * 1000) < 60)) {
                tempDate.append(day / (60 * 1000)).append(" Mins Ago");
            }
            // else if ((day / (60 * 60 * 1000)) < 24) {
            else if ((new Date(callDate).getDate()) == (new Date(currentDate))
                    .getDate()) {
                SimpleDateFormat format = new SimpleDateFormat(" hh:mm a ");
                tempDate.append("Today").append(format.format(new Date(callDate)));
            } else if ((day / (24 * 60 * 60 * 1000)) < 8) {

                tempDate.append((day / (24 * 60 * 60 * 1000))).append(" Days Ago");
            } else {
                SimpleDateFormat parseFormat = new SimpleDateFormat("dd MMM",
                        Locale.ENGLISH);
                tempDate.append(parseFormat.format(new Date(callDate)));
            }
            return tempDate.toString();
        }

        @TargetApi(Build.VERSION_CODES.HONEYCOMB)
        private Bitmap getContactImage(String mNumber) {

            Bitmap cPhoto = null;
            BufferedInputStream buf_stream = null;

            Cursor cursorPhoto = getActivity().getContentResolver().query(
                    Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
                            Uri.decode(mNumber)), new String[] { PhoneLookup._ID },
                    null, null, null);
            InputStream photo_stream = null;
            if (cursorPhoto.moveToFirst()) {
                String contactId = cursorPhoto.getString(0);
                Uri contactPhotoUri = ContentUris.withAppendedId(
                        ContactsContract.Contacts.CONTENT_URI,
                        Long.parseLong(contactId));

                try {
                    photo_stream = ContactsContract.Contacts
                            .openContactPhotoInputStream(getActivity()
                                    .getContentResolver(), contactPhotoUri);

                    buf_stream = new BufferedInputStream(photo_stream);

                    cPhoto = BitmapFactory.decodeStream(buf_stream);

                    // buf_stream.close();
                    // photo_stream.close();

                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (buf_stream != null && photo_stream != null) {
                        try {
                            buf_stream.close();
                            photo_stream.close();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                    }
                }

            }
            cursorPhoto.close();
            return cPhoto;
        }

    }
    //call log fragmnet xml file


    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/call_history"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <ListView
            android:id="@+id/call_logs_history"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </ListView>

    </LinearLayout>

    // call log Adapter class 

    public class CallLogsArrayAdapter extends ArrayAdapter<CallLogModel> {
        private LayoutInflater inflater;
        private TextView mName, mDate, mNumber;
        private ImageView mPhoto, mType;
        // private ImageButton type;
        Context context;
        int resourceId;

        /* Constructor */
        public CallLogsArrayAdapter(Context context, int resourceID,
                List<CallLogModel> callLogsList) {
            super(context, resourceID, callLogsList);
            this.context = context;
            this.resourceId = resourceID;
            // Cache the LayoutInflate to avoid asking for a new one each time.
            inflater = LayoutInflater.from(context);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            // Contact to display
            final CallLogModel callLogModel = this.getItem(position);

            convertView = inflater.inflate(R.layout.call_log_list, null);

            // Find the child views.
            mPhoto = (ImageView) convertView.findViewById(R.id.call_log_photo);
            mName = (TextView) convertView.findViewById(R.id.call_log_name);
            mNumber = (TextView) convertView.findViewById(R.id.call_log_number);
            mDate = (TextView) convertView.findViewById(R.id.call_log_date);
            mType = (ImageView) convertView.findViewById(R.id.call_log_type);

            // setting values in to view objects
            if (callLogModel.getPhoto() != null) {
                mPhoto.setImageBitmap(callLogModel.getPhoto());
            }

            mName.setText(callLogModel.getName());
            mDate.setText(callLogModel.getDate());
            mNumber.setText(callLogModel.getNumber());

            mType.setImageResource(callLogModel.getType());

            return convertView;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return super.getCount();
        }
    }

    // call log adpater xml file

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="72dp"
        android:background="@color/Gray" >

        <ImageView
            android:id="@+id/call_log_photo"
            android:layout_width="72dp"
            android:layout_height="60dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginBottom="12dp"
            android:layout_marginTop="12dp"
            android:contentDescription="@string/app_name"
            android:src="@drawable/log_default" />

        <TextView
            android:id="@+id/call_log_name"
            android:layout_width="120dp"
            android:layout_height="30dp"
            android:layout_alignLeft="@+id/call_log_number"
            android:layout_alignParentTop="true"
            android:layout_marginTop="6dp"
            android:gravity="left"
            android:paddingLeft="4dp"
            android:text="@string/app_name"
            android:textSize="12sp" />

        <TextView
            android:id="@+id/call_log_number"
            android:layout_width="120dp"
            android:layout_height="30dp"
            android:layout_below="@+id/call_log_name"
            android:layout_marginBottom="6dp"
            android:layout_toRightOf="@+id/call_log_photo"
            android:gravity="left"
            android:paddingLeft="4dp"
            android:text="@string/app_name"
            android:textSize="12sp" />

        <TextView
            android:id="@+id/call_log_date"
            android:layout_width="60dp"
            android:layout_height="30dp"
            android:layout_alignParentBottom="true"
            android:layout_alignRight="@+id/call_log_type"
            android:layout_below="@+id/call_log_type"
            android:layout_toRightOf="@+id/call_log_name"
            android:text="@string/app_name"
            android:textSize="12sp" />

        <ImageView
            android:id="@+id/call_log_type"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_alignParentRight="true"
            android:layout_alignTop="@+id/call_log_photo"
            android:layout_marginRight="16dp"
            android:contentDescription="@string/app_name"
            android:src="@drawable/log_out" />

    </RelativeLayout>

    /// finally call log Model class


    public class CallLogModel {

        private String id;
        private String name;
        private String number;
        private String duration;
        private String date;
        private int type;
        private Bitmap photo;

        public CallLogModel(String id, String name, String number, String duration,
                String date, int type, Bitmap photo) {
            this.id = id;
            this.name = name;
            this.number = number;
            this.duration = duration;
            this.date = date;
            this.type = type;
            this.photo = photo;
        }

        public Bitmap getPhoto() {
            return photo;
        }

        public String getId() {
            return id;
        }

        public int getType() {
            return type;
        }

        public String getName() {
            return name;
        }

        public String getNumber() {
            return number;
        }

        public String getDuration() {
            return duration;
        }

        public String getDate() {
            return date;
        }

    }

    help me am getting below error messages in my cat log 
    ----------------------------------------------------------

    adid=1: thread exiting with uncaught exception (group=0x409961f8)
    05-30 09:41:10.503: E/AndroidRuntime(742): FATAL EXCEPTION: main
    05-30 09:41:10.503: E/AndroidRuntime(742): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.aspiresys.fragmnetcalllogs/com.aspiresys.fragmnetcalllogs.FragmentCallLogActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.app.ActivityThread.access$600(ActivityThread.java:122)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.os.Handler.dispatchMessage(Handler.java:99)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.os.Looper.loop(Looper.java:137)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.app.ActivityThread.main(ActivityThread.java:4340)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at java.lang.reflect.Method.invokeNative(Native Method)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at java.lang.reflect.Method.invoke(Method.java:511)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at dalvik.system.NativeStart.main(Native Method)
    05-30 09:41:10.503: E/AndroidRuntime(742): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fragment
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.app.Activity.setContentView(Activity.java:1835)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at com.aspiresys.fragmnetcalllogs.FragmentCallLogActivity.onCreate(FragmentCallLogActivity.java:11)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.app.Activity.performCreate(Activity.java:4465)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
    05-30 09:41:10.503: E/AndroidRuntime(742):  ... 11 more
    05-30 09:41:10.503: E/AndroidRuntime(742): Caused by: java.lang.NullPointerException
    05-30 09:41:10.503: E/AndroidRuntime(742):  at com.aspiresys.fragmnetcalllogs.CallLogsFragment.onCreateView(CallLogsFragment.java:45)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:773)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:977)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1056)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.app.Activity.onCreateView(Activity.java:4243)
    05-30 09:41:10.503: E/AndroidRuntime(742):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:673)
4

2 回答 2

1

看起来您在错误的位置搜索 ListView。

callLogListView = (ListView) container.findViewById(R.id.call_logs_history);

应该:

callLogListView = (ListView) callLogsmanagerView.findViewById(R.id.call_logs_history);
于 2013-05-30T05:07:32.437 回答
0

对于可能面临此问题的其他人(例如我!),如果您<application>的布局中有标签,则可能会发生这种情况

于 2013-10-06T17:43:37.327 回答