2013-12-20 46 views
2

我在我的應用程序中有一個問題,我動態設置標題視圖爲listview但我得到錯誤,我有兩個活動,A和B根據我的條件I我設置標題視圖爲listview當我在A活動中設置headerview它工作正常,但是當A活動假我的條件並去B活動那裏我的條件是真的然後來一個活動我需要添加標題視圖那裏我越來越錯誤................我試圖添加onStart(),onResume()方法,但仍然得到相同的錯誤.....如何解決它java.lang.IllegalStateException:無法添加標題視圖列表Android

Java代碼

on Strat() 
{ 


      if (mDrawerList.getHeaderViewsCount()<1) { 
      TextView headerText = new TextView(mContext); 

      headerText.setGravity(Gravity.CENTER); 
      headerText.setTextColor(getResources().getColor(R.color.white_color)); 
      headerText.setPadding(20, 12, 20, 12); 
      headerText.setTextSize(18); 
      headerText.setText(mSessionManager.getUserName()); 
      mDrawerList.addHeaderView(headerText); 
      } 


     adapter = new NavDrawerListAdapter(mContext, navDrawerItems); 
    mDrawerList.setDividerHeight(2); 

    mDrawerList.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 

    } 

錯誤消息

2-20 15:15:34.799: E/AndroidRuntime(13111): FATAL EXCEPTION: main 
12-20 15:15:34.799: E/AndroidRuntime(13111): java.lang.RuntimeException: Unable to resume activity {com.examle.EventListActivity}: java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called. 
12-20 15:15:34.799: E/AndroidRuntime(13111): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2790) 
12-20 15:15:34.799: E/AndroidRuntime(13111): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2819) 
12-20 15:15:34.799: E/AndroidRuntime(13111): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298) 
12-20 15:15:34.799: E/AndroidRuntime(13111): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-20 15:15:34.799: E/AndroidRuntime(13111): at android.os.Looper.loop(Looper.java:137) 
12-20 15:15:34.799: E/AndroidRuntime(13111): at android.app.ActivityThread.main(ActivityThread.java:5103) 
12-20 15:15:34.799: E/AndroidRuntime(13111): at java.lang.reflect.Method.invokeNative(Native Method) 
12-20 15:15:34.799: E/AndroidRuntime(13111): at java.lang.reflect.Method.invoke(Method.java:525) 
12-20 15:15:34.799: E/AndroidRuntime(13111): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
12-20 15:15:34.799: E/AndroidRuntime(13111): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
12-20 15:15:34.799: E/AndroidRuntime(13111): at dalvik.system.NativeStart.main(Native Method) 
12-20 15:15:34.799: E/AndroidRuntime(13111): Caused by: java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called. 
12-20 15:15:34.799: E/AndroidRuntime(13111): at android.widget.ListView.addHeaderView(ListView.java:258) 
12-20 15:15:34.799: E/AndroidRuntime(13111): at android.widget.ListView.addHeaderView(ListView.java:287) 
+3

'不能將標題視圖添加到列表中 - setAdapter已經被調用.'這就是說....你必須先添加標題然後setAdapter才能查看;] – Gooziec

+0

befor設置適配器我正在添加標題視圖 – venu

+0

它似乎不是。您可能正在訪問已經安裝的「ListView」。向我們展示相關代碼的更多部分。 – Rajesh

回答

8

請看一看的addHeaderView的文檔。

要特別注意說明:

注:當第一次介紹,這種方法只能用setAdapter(ListAdapter)設置適配器之前調用。從KITKAT開始,可以隨時調用此方法。如果ListView的適配器不擴展HeaderViewListAdapter,它將被WrapperListAdapter的支持實例包裝。

+1

我已經看到它,但如何解決它 – venu

+0

你可以使用'setVisibility'方法隱藏標題的視圖 –

0

需要檢查列表是否已經設置了適配器。

if (mDrawerList.getAdapter==null) { 
    // add the header view here.this will work      
} 
-1
list.setAdapter(null); 
list.addHeaderView(loading.getView()); 
4

如何:

ListAdapter adapter = listView.getAdapter(); 
    listView.setAdapter(null); 
    listView.addHeaderView(headerView); 
    listView.setAdapter(adapter); 

唯一的問題就在這裏,是它重新啓動滾動條位置。但是,在設置適配器後,沒有其他方法可以添加headerView。

+0

它的工作原理!非常感謝! –

+0

非常好!是的,這工作。 – ajay