0

我基本上有代码

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);

布局名称.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 小时)。

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

4

2 回答 2

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,但效果不会很好。

于 2017-03-16T10:07:19.897 回答
0

改变两者

 android:layout_width="match_parent"

 android:layout_width="wrap_content"

它可能会帮助你。

于 2013-01-10T12:24:14.980 回答