我基本上有代码
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小时)。
有人知道这是为什么吗?希望有一个解决方案
不要使用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线程中膨胀。将请求loop .loop();呼叫AsyncLayoutInflater将在UI线程中膨胀这样的视图,并异步休息。
最终你不能在单独的线程中膨胀EditText。这只是你想要达到的目标的一个变通办法。同样,您可以尝试HandlerThread,但不会有太大的好处。
change both
android:layout_width="match_parent"
android:layout_width="wrap_content"
它可能对你有帮助