0

我Basicly有代碼的AsyncTask LayoutInflater InflateException上的EditText

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小時)。

有人知道這個的原因嗎? 並希望解決

+1

在工作者線程中增加視圖並不是最好的想法,爲什麼你需要這樣做? – Egor

+0

,因爲它需要一段時間才能加載。 即使我得到我需要的服務器 – user1838668

+0

無論如何,這將無法正常工作,因爲Android UI框架不是線程安全的。 – Egor

回答

0

變化都

android:layout_width="match_parent" 

android:layout_width="wrap_content" 

它可以幫助你。

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相同,但不會有太大的好處。