[英]Corrupted inflated view
這是我的場景:在我的應用程序中,我有一個Main活動,兩個片段和一個在后台運行的服務。 我使用以下代碼將這些片段附加到我的主要活動中:
Fragment f1;
f1=new loginfragment();
FragmentTransaction ft=getFragmentManager().beginTransaction();
ft.add(R.id.frame,f1);
ft.commit();
哪個工作正常。 這些片段之一包含一個附加到適配器的列表視圖。(我已驗證適配器已正確附加到該列表視圖,並且可以將條目添加到該列表視圖而沒有任何問題。
為了能夠在listview適配器(擴展BaseAdapter)中增加一個布局,我創建了一個構造函數來向其提供Context。 后台服務會定期檢查頁面,並使用該片段實現的接口將結果發送到其中一個片段(發送廣播對我不起作用)。
接口的定義如下:
interface resultInterface{
void receive(String s,Context con);
}
片段實現了這樣的接口:
@Override
public void receive(String s,Context con){
String elements[]=s.split("<br>");
if(elements.length>1) {
if(elements[0].equals("REQUEST")) {
init_notification("REQUEST",detect(elements[1],elements[2]));// a function that shows a notification
item i = new item(elements[1], elements[2]);
orders.add(i);
adapter = new listview_adapter(orders,c);
list.setAdapter(adapter);}
}
}
orders是一個Arraylist,而c是要傳遞給listview適配器的上下文。 服務會像下面這樣調用此接口方法:
resultInterface resultinterface=new servefragment();
resulstinterface.receive(s,this);
在接收到數據后(導致調用接口方法),片段方法應該拆分數據並將條目添加到列表視圖中。(我已驗證數據已正確傳遞給接口方法。
但是,顯示為列表視圖條目的視圖不正確(看起來以某種方式損壞)。 這是它的外觀(使用偽數據): 像這樣
但實際上是這樣添加它們的(從服務器收到了1個項目,這是正確的,但布局卻不正確): 像這樣
如果您需要更多信息,請發表評論,我將其添加
我的猜測是,您的服務傳遞給您的Context
對象具有與預期不同的主題。 這可能會導致文本顏色,按鈕顏色等全部更改。
為了能夠在listview適配器(擴展BaseAdapter)中增加一個布局,我創建了一個構造函數來向其提供Context。
除非您需要在getView()
內之外的其他地方使用Context
實例,否則不必通過構造函數傳遞Context
。 這是getView()
方法的完整簽名:
public View getView(int position, View convertView, ViewGroup parent)
parent
參數保證為非空,並且所有View
實例都具有getContext()
方法,因此您始終可以通過編寫parent.getContext()
來檢索Context
。 此外,這將是您的活動 (與您的應用程序之類的東西不同),具有具有正確主題的附加好處。
因此,刪除將Context
傳遞到您的適配器中的所有代碼,而只需使用parent.getContext()
,我敢打賭問題會消失。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.