2011-03-16 182 views
0

我想爲我的應用程序構建一個RSS提要閱讀器,並且我有一個奇怪的問題。爲了實現這個提要,我使用了一個ListView,我從我自定義的ArrayList中填充。我知道ArrayList是完整的,我想要顯示的所有字段(我將它們全部打印在Logcat中),但是當我運行該應用程序時,並非我ListView中的所有單元格都填充了它們的信息應該是,他們的主要部分顯示TextView。這似乎是非常隨機的,但始終正確工作的是第一個元素。其他人有時會這樣做。Android:ListView沒有完全填充

另一個奇怪的是,OnItemClickListener完美工作,即使我無法看到我的元素中的信息。

非常感謝您的高級。

我附上我getView代碼:

public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    AdapterWrapper wrapper; 
    if (v == null) { 
     LayoutInflater li = (LayoutInflater) this.getContext() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = li.inflate(R.layout.itemrow, null); 
     wrapper = new AdapterWrapper(v, cont); 
     v.setTag(wrapper); 
    } else { 
     wrapper = (AdapterWrapper) convertView.getTag(); 
     RssItem o = this.getItem(position); 
     if (o != null) 
      wrapper.populateFrom(o); 
     parent.refreshDrawableState(); 
    } 
    return v; 
} 
+1

我們需要看代碼。 – 2011-03-16 16:34:32

+0

當你說你「定製」一個ArrayList時,你是什麼意思? – 2011-03-16 16:35:18

+0

對不起,我的意思是我擴展了一個ArrayAdapter – JoanG 2011-03-16 16:36:11

回答

0

可能是你沒有正確getView處理回收的視圖情況。

當你檢查看到convertView != null時,你仍然需要在你的convertView中填充的信息。實際的視圖層次結構將存在,但信息將來自舊的,與不同行相關的再循環視圖。

欲瞭解更多具體信息,請發佈您的getView代碼。

編輯 - 我想你需要致電wrapper.populateFrom(o),不管你有沒有convertView。嘗試移動該部分的if語句之外:

if (v == null) { 
    LayoutInflater li = (LayoutInflater) this.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    v = li.inflate(R.layout.itemrow, null); 
    wrapper = new AdapterWrapper(v, cont); 
    v.setTag(wrapper); 
} else { 
    wrapper = (AdapterWrapper) convertView.getTag(); 
} 
RssItem o = this.getItem(position); 
if (o != null) 
    wrapper.populateFrom(o); 
parent.refreshDrawableState(); // not sure what this is doing 
+0

你走了,我發佈了我的getView代碼。 – JoanG 2011-03-16 16:41:54

+0

我得到了我的錯誤,我認爲我可以做出的最愚蠢的事情是,{它不應該去那裏。 – JoanG 2011-03-16 16:45:06

+0

你應該總是使用像我上面張貼的花括號,否則很容易犯這樣的錯誤。 – 2011-03-16 16:49:14

0

我得到它的工作,我有一個{這是不應該的

其他

字後,所以代碼最後是:

public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    AdapterWrapper wrapper; 
    if (v == null) { 
     LayoutInflater li = (LayoutInflater) this.getContext() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = li.inflate(R.layout.itemrow, null); 
     wrapper = new AdapterWrapper(v, cont); 
     v.setTag(wrapper); 
    } else 
     wrapper = (AdapterWrapper) convertView.getTag(); 

    RssItem o = this.getItem(position); 
    if (o != null) 
     wrapper.populateFrom(o); 
    parent.refreshDrawableState(); 

    return v; 
}