EditText上的AsyncTask LayoutInflater InflateException

时间:2013-01-10 11:55:28

标签: android android-asynctask android-edittext layout-inflater inflate-exception

我基本上有代码

new AsyncTask<Integer, Void, View>() {
@Override
protected View doInBackground(Integer... tabIds) {
    return mInflater.inflate(R.layout.layout_name, null);
}
@Override
protected void onPostExecute(View result) {
    super.onPostExecute(result);
            root_layout.addView(result);
}
}.execute(tabId);

layout_name.xml:

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


<EditText
    android:id="@+id/text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text" />

<Button
    android:id="@+id/do_stuff"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

</LinearLayout>

我得到InflateException: Binary XML file line #x: Error inflating class <unknown>。 如果我删除EditText,则无效problems

我找不到它的原因(花了2小时)。

有谁知道这个的原因? 希望是一个解决方案

2 个答案:

答案 0 :(得分:1)

而不是使用AsynTask,例如使用AsyncLayoutInflater:

  MyClass extends Fragment implements  AsyncLayoutInflater.OnInflateFinishedListener {

        @Override
        public void onCreate(Bundle savedInstanceState) {
         new AsyncLayoutInflater(context).inflate(childViewId, parent, this);
         //show progress..
        }
        @Override
        public void onInflateFinished(View view, int resid, ViewGroup parent){
            if (view != null) {
             //You have inflated view to use in UI Thread.
            }
        }
    }

除此之外,还有一些陷阱: AsyncLayoutInflater类还将处理不能异步膨胀的视图的情况。这样的视图类没有处理程序实现,如果你试图在AsyncTask或Thread类中进行膨胀,就会抛出异常(如你的情况)。例如,EditText只能在UI线程中膨胀。请问looper.loop();呼叫。 AsyncLayoutInflater会在UI线程中膨胀这些视图并异步休息。

最终你不能在单独的线程中膨胀EditText。这只是您尝试实现的解决方法。 此外,您可以尝试使用HandlerThread,但不会做太多好事。

答案 1 :(得分:0)

改变两者

 android:layout_width="match_parent"

 android:layout_width="wrap_content"

它可能对你有帮助。