片段-android.view.InflateException:二进制XML文件

片段-android.view.InflateException:二进制XML文件,android,xml,android-layout,android-fragments,Android,Xml,Android Layout,Android Fragments,我在这里读了很多关于这个错误的文章,但是到目前为止没有任何帮助。我得到的错误是: android.view.InflateException: Binary XML file line #10: error inflating class fragment 我正在制作一个Twitter客户端应用程序,并使用我的ComposeTweetActivity.java中的一个片段。所以我有这个类和一个片段类,然后每个类都有一个布局。我将发布所有4个文件和我的日志。如果你需要看更多,请告诉我。事先非常感

我在这里读了很多关于这个错误的文章,但是到目前为止没有任何帮助。我得到的错误是:

android.view.InflateException: Binary XML file line #10: error inflating class fragment
我正在制作一个Twitter客户端应用程序,并使用我的ComposeTweetActivity.java中的一个片段。所以我有这个类和一个片段类,然后每个类都有一个布局。我将发布所有4个文件和我的日志。如果你需要看更多,请告诉我。事先非常感谢

tweetActivity.java

package com.codepath.apps.mytwitterapp.activities;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;

import com.codepath.apps.mytwitterapp.R;
import com.codepath.apps.mytwitterapp.fragments.ComposeTweetFragment.OnComposeTweetListener;
import com.codepath.apps.mytwitterapp.models.Tweet;
/** 
 * Class hosts fragment for composing and posting tweets
 */
public class ComposeTweetActivity extends ActionBarActivity implements OnComposeTweetListener {

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.compose_tweet, menu);
        return true;
    }

    @Override
    public void onTweetCanceled() {
        Intent i = new Intent();
        setResult(RESULT_CANCELED, i);
        finish(); 
    }

    @Override
    public void onTweetPosted(Tweet postedTweet) {
        Intent i = new Intent();
        i.putExtra("new_tweet", postedTweet);
        setResult(RESULT_OK, i);
        finish(); 
    }

}
package com.codepath.apps.mytwitterapp.fragments;

import org.json.JSONObject;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;

import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.codepath.apps.mytwitterapp.R;
import com.codepath.apps.mytwitterapp.activities.MyTwitterApp;
import com.codepath.apps.mytwitterapp.helpers.AsyncTweetSave;
import com.codepath.apps.mytwitterapp.models.Tweet;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.nostra13.universalimageloader.core.ImageLoader;

/**
 * Class represents a screen to compose and post tweets. User is warned if text
 * typed passes the 140-character limit
 */
public class ComposeTweetFragment extends Fragment {

    private Activity  activity; 
    private Button    btnCancel,
                      btnTweet;
    private ImageView ivUserImage;
    private TextView  tvUserName;
    private EditText  etNewTweet;
    private boolean   alreadyToasted = false;

    private OnComposeTweetListener listener; 


    public interface OnComposeTweetListener {
        public void onTweetPosted(Tweet postedTweet);
        public void onTweetCanceled();
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity); 

        if (activity instanceof OnComposeTweetListener) {
            listener = (OnComposeTweetListener) activity;
        } else {
            throw new ClassCastException(activity.toString() + " must implement "
                                        + "OnTweetComposedListener interface");
        }

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        super.onCreateView(inflater, parent, savedInstanceState);
        View v = inflater.inflate(R.layout.fragment_compose_tweet, parent, false); 

        setupButtons(v);
        setupImageView(v);
        setupTextView(v);
        setupEditText(v);
        return v; 
    }

    private void setupButtons(View v) {
        btnCancel = (Button) v.findViewById(R.id.btnCancel); 
        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.onTweetCanceled(); 
            }
        });

        btnTweet = (Button) v.findViewById(R.id.btnTweet);
        btnTweet.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String tweetBody = etNewTweet.getText().toString();
                tweet(tweetBody);
            }
        }); 
    }

    private void setupImageView(View v) {
        ivUserImage = (ImageView) v.findViewById(R.id.ivUserImage);
        ImageLoader.getInstance().displayImage(getActivity().getIntent()
                .getStringExtra("user_image_url"), ivUserImage); 
    }

    private void setupTextView(View v) {
        tvUserName = (TextView) v.findViewById(R.id.tvUserName);
        tvUserName.setText("@" + getActivity().getIntent().getStringExtra("screen_name")); 
    }

    private void setupEditText(View v) {
        etNewTweet = (EditText) v.findViewById(R.id.etNewTweet); 

        // Show soft keyboard when EditText field requests focus
        if (etNewTweet.requestFocus()) {
            InputMethodManager mgr = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            mgr.showSoftInput(etNewTweet, InputMethodManager.SHOW_IMPLICIT); 
        }

        etNewTweet.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (!alreadyToasted && s.length() == 140) {
                    Toast.makeText(activity, "You've reached the 140-character"
                            + " limit", Toast.LENGTH_LONG).show(); 
                    alreadyToasted = true; 
                }
                else if (s.length() > 140) {
                    etNewTweet.setTextColor(Color.RED); 
                } else {
                    etNewTweet.setTextColor(Color.BLACK); 
                }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

            @Override
            public void afterTextChanged(Editable s) { }
        });

    }

    private void tweet(String tweetBody) {
        MyTwitterApp.getRestClient().postTweet(tweetBody, new JsonHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, JSONObject jsonTweetResponse) {
                Tweet newTweet = Tweet.fromJson(jsonTweetResponse); 
                new AsyncTweetSave().execute(newTweet); // Might need to disable
                listener.onTweetPosted(newTweet);
            }   

            @Override
            public void onFailure(Throwable e, JSONObject error) {
                Log.e("ERROR", e.getMessage());
            }
        });
    }

}
ComposeTweetFragment.java

package com.codepath.apps.mytwitterapp.activities;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;

import com.codepath.apps.mytwitterapp.R;
import com.codepath.apps.mytwitterapp.fragments.ComposeTweetFragment.OnComposeTweetListener;
import com.codepath.apps.mytwitterapp.models.Tweet;
/** 
 * Class hosts fragment for composing and posting tweets
 */
public class ComposeTweetActivity extends ActionBarActivity implements OnComposeTweetListener {

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.compose_tweet, menu);
        return true;
    }

    @Override
    public void onTweetCanceled() {
        Intent i = new Intent();
        setResult(RESULT_CANCELED, i);
        finish(); 
    }

    @Override
    public void onTweetPosted(Tweet postedTweet) {
        Intent i = new Intent();
        i.putExtra("new_tweet", postedTweet);
        setResult(RESULT_OK, i);
        finish(); 
    }

}
package com.codepath.apps.mytwitterapp.fragments;

import org.json.JSONObject;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;

import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.codepath.apps.mytwitterapp.R;
import com.codepath.apps.mytwitterapp.activities.MyTwitterApp;
import com.codepath.apps.mytwitterapp.helpers.AsyncTweetSave;
import com.codepath.apps.mytwitterapp.models.Tweet;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.nostra13.universalimageloader.core.ImageLoader;

/**
 * Class represents a screen to compose and post tweets. User is warned if text
 * typed passes the 140-character limit
 */
public class ComposeTweetFragment extends Fragment {

    private Activity  activity; 
    private Button    btnCancel,
                      btnTweet;
    private ImageView ivUserImage;
    private TextView  tvUserName;
    private EditText  etNewTweet;
    private boolean   alreadyToasted = false;

    private OnComposeTweetListener listener; 


    public interface OnComposeTweetListener {
        public void onTweetPosted(Tweet postedTweet);
        public void onTweetCanceled();
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity); 

        if (activity instanceof OnComposeTweetListener) {
            listener = (OnComposeTweetListener) activity;
        } else {
            throw new ClassCastException(activity.toString() + " must implement "
                                        + "OnTweetComposedListener interface");
        }

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        super.onCreateView(inflater, parent, savedInstanceState);
        View v = inflater.inflate(R.layout.fragment_compose_tweet, parent, false); 

        setupButtons(v);
        setupImageView(v);
        setupTextView(v);
        setupEditText(v);
        return v; 
    }

    private void setupButtons(View v) {
        btnCancel = (Button) v.findViewById(R.id.btnCancel); 
        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.onTweetCanceled(); 
            }
        });

        btnTweet = (Button) v.findViewById(R.id.btnTweet);
        btnTweet.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String tweetBody = etNewTweet.getText().toString();
                tweet(tweetBody);
            }
        }); 
    }

    private void setupImageView(View v) {
        ivUserImage = (ImageView) v.findViewById(R.id.ivUserImage);
        ImageLoader.getInstance().displayImage(getActivity().getIntent()
                .getStringExtra("user_image_url"), ivUserImage); 
    }

    private void setupTextView(View v) {
        tvUserName = (TextView) v.findViewById(R.id.tvUserName);
        tvUserName.setText("@" + getActivity().getIntent().getStringExtra("screen_name")); 
    }

    private void setupEditText(View v) {
        etNewTweet = (EditText) v.findViewById(R.id.etNewTweet); 

        // Show soft keyboard when EditText field requests focus
        if (etNewTweet.requestFocus()) {
            InputMethodManager mgr = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            mgr.showSoftInput(etNewTweet, InputMethodManager.SHOW_IMPLICIT); 
        }

        etNewTweet.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (!alreadyToasted && s.length() == 140) {
                    Toast.makeText(activity, "You've reached the 140-character"
                            + " limit", Toast.LENGTH_LONG).show(); 
                    alreadyToasted = true; 
                }
                else if (s.length() > 140) {
                    etNewTweet.setTextColor(Color.RED); 
                } else {
                    etNewTweet.setTextColor(Color.BLACK); 
                }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

            @Override
            public void afterTextChanged(Editable s) { }
        });

    }

    private void tweet(String tweetBody) {
        MyTwitterApp.getRestClient().postTweet(tweetBody, new JsonHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, JSONObject jsonTweetResponse) {
                Tweet newTweet = Tweet.fromJson(jsonTweetResponse); 
                new AsyncTweetSave().execute(newTweet); // Might need to disable
                listener.onTweetPosted(newTweet);
            }   

            @Override
            public void onFailure(Throwable e, JSONObject error) {
                Log.e("ERROR", e.getMessage());
            }
        });
    }

}
activity\u compose\u tweet.xml

<RelativeLayout 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:background="#185277"
    tools:context="com.codepath.apps.mytwitterapp.activities.ComposeTweetActivity"
    tools:ignore="MergeRootFrame" >

    <fragment
        android:id="@+id/fragmentComposeTweet"
        android:name="com.codepath.apps.mytwitterapp.fragments.ComposeTweetFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        tools:layout="@android:layout/fragment_compose_tweet" />

</RelativeLayout>
<?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="match_parent" 
    android:background="#185277" >

  <Button
        android:id="@+id/btnCancel"
         android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="30dp"
        android:background="@drawable/cancel_button_outline"
        android:textColor="#ffffff"
        android:text="@string/btn_cancel" />

    <Button
        android:id="@+id/btnTweet"
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="20dp"
        android:layout_marginTop="30dp"
        android:background="@drawable/tweet_button_outline"
        android:textColor="#ffffff"
        android:textStyle="bold"
        android:text="@string/btn_tweet" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:layout_alignLeft="@+id/btnCancel"
        android:layout_below="@+id/btnCancel"
        android:layout_marginRight="20dp"
        android:layout_marginTop="50dp"
        android:orientation="vertical" >

        <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
            android:layout_marginBottom="20dp"
         android:background="#ffffff"
         android:orientation="horizontal" >

            <ImageView
                android:id="@+id/ivUserImage"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:layout_margin="10dp" 
                android:src="@drawable/ic_action_user_profile_dark" />

            <TextView 
                android:id="@+id/tvUserName"
               android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_toRightOf="@id/ivUserImage"
                android:textStyle="bold|italic"
                android:text="@string/twitter_handle" />

         </RelativeLayout>   

         <EditText
             android:id="@+id/etNewTweet"
             android:layout_width="match_parent"
             android:layout_height="160dp"
             android:padding="10dp"
             android:background="#ffffff"
             android:gravity="top"
             android:hint="@string/et_new_tweet_hint"
             android:inputType="textEmailAddress|textCapSentences|textMultiLine"
             android:imeOptions="actionDone" /> 

    </LinearLayout>

</RelativeLayout>
改变这个

InputMethodManager mgr = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);

这个


在ComposeTweetFragment中的第113行是什么?您好,它是InputMethodManager:'if(etnewweet.requestFocus()){InputMethodManager mgr=(InputMethodManager)activity.getSystemService(Context.INPUT_方法_服务);mgr.showSoftInput(etnewweet,InputMethodManager.SHOW_隐式);}“好吧,那就听拉古南丹的回答吧。非常感谢!这解决了撞车问题。我现在至少可以打开活动了(虽然还有其他错误,但这一个已经修复)。但我很好奇,为什么在活动中出现错误时它会指向我的XML?有什么想法吗?作为一个初学者,我一直在努力理解神秘的航海日志P
private Activity  activity;