[英]Setting layout of first ListView Item
因此,我嘗試使用以下代碼為我的第一個ListItem元素設置不同的布局資源:
int type;
@Override
public int getItemViewType(int position) {
if(position==0) {
type = R.layout.queue_item_next;
} else {
type = R.layout.queue_item;
}
return type;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = (View) inflater.inflate(getItemViewType(position), parent, false);
}
但是,此代碼具有某些意外行為。 由於某種原因,ListView的最后一個元素也被設置為具有這種替代布局,我不知道為什么。
什么會導致這種情況發生?
謝謝。
由於即將出現問題,因為getItemViewType()返回的值大於視圖類型的數量。 您可以使用下面的代碼對我來說工作得很好。
@Override
public int getItemViewType(int position) {
if(position==0) {
return 0;
}
return 1;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
int type = getItemViewType(position);
if(type == 0)
convertView = (View) inflater.inflate(R.layout.first_layout, parent, false);
else
convertView = (View) inflater.inflate(R.layout.second_layout, parent, false);
}
}
注意:如果只有第一個視圖不同,那么最好的選擇是通過此鏈接使用listView.addHeaderView()函數的headerView
因為您使用的是if(convertView == null) {}
,這意味着如果以前的視圖在內存中可用,則使用另一個視圖來創建一個新視圖。 因此,有時快速/慢速滾動取決於電話的可用資源而有所不同。
解決此問題,請不要檢查if(convertView == null)
這樣使用
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = (View) inflater.inflate(getItemViewType(position), parent, false);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.