2011-04-15 29 views
0

我在BaseAdapter中有以下getView。瞭解BaseAdapter中的converView

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    LinearLayout itemLo; 

    if (convertView != null) { 
     itemLo = (LinearLayout) convertView; 
    } else { 
     itemLo = (LinearLayout) LayoutInflater.from(mContext.getApplicationContext()). 
inflate(R.layout.item, parent, false); 
    } 

    View v1 = itemLo.findViewById(R.id.view1); 
    View v2 = itemLo.findViewById(R.id.view2); 

    if (position == 0) { 
     v1.setVisibility(View.GONE); 
     v2.setText("Start"); 
    } else { 
     v1.setText("" + position); 
     v2.setText("" + position); 
    } 

    return convertView; 
} 

當它是第一行(行0),我躲在0.我的擔心是排V1的是,行0滾動窗外後,0行converView會被其他重用行。問題是,行0中的v1已經在第0行中設置爲View.GONE。如果其他行重複使用第0行的converView,我必須將View.Visible設置爲v1嗎?我的測試表明,我不必在convertView中重置v1的可見性。所以我很困惑。當convertView被重用時,converView是否保留了其中每個視圖的可見性屬性?

謝謝。

回答

0

您必須根據您的數據使用條件,而不是使用當前位置。

MyClass c = (MyClass) getItem(position); 
.... 
if (c.isVisible()) { 
    v1.setText("" + position); 
    v2.setText("" + position); 
} else { 
    v1.setVisibility(View.GONE); 
    v2.setText("Start"); 
} 
... 

(c.isVisible)或你喜歡的任何其他條件。

converView是用於重複使用的東西,這意味着您必須設置/重置之前調用getView方法之前可能更改的每個屬性。

我必須將View.Visible設置爲v1嗎?