2015-09-08 54 views
0

據我所知,位置從整個列表中返回特定的選定項目。那麼,適配器如何使用這個位置並在沒有某種循環的情況下傳輸所有的項目呢?我想在我看來,關於名單和職位有一個基本的錯誤。 這是代碼:該位置如何在適配器中的getView中工作?

(謝謝你在前進):

public View getView(int position, View convertView, ViewGroup parent) { 
     viewHolder holder; 

if (convertView==null){ 

    convertView= LayoutInflater.from(mContext).inflate(R.layout.customupdatestatus, null); 
    holder=new viewHolder(); 
    holder.statusHomePage=(TextView)convertView.findViewById(R.id.statusUploaded); 
    holder.userNameHomePage=(TextView)convertView.findViewById(R.id.userNameUpdate); 

    convertView.setTag(holder); 
}else{ 
    holder=(viewHolder) convertView.getTag(); 
} 
     ParseObject statusObject= mStatus.get(position); 

String username= statusObject.getString("userName"); 
     holder.userNameHomePage.setText(username); 

     String status=statusObject.getString("newStatus"); 
     holder.statusHomePage.setText(status); 

     return convertView; 
    } 

回答

0

好,這一點是被竊聽我一段時間。所以,當視圖被創建時,你可以看到一定數量的行。從視圖中的第一行到最後一行,適配器正在計數。當您向下滾動時,計數器會重置,或者我會說,它會重新開始。因此,可以說當創建視圖時,屏幕上有10行。當您向下滾動時,如果您選擇檢查第5行,它將在第一個視圖上進行選擇,當您滾動時,它將顯示其他元素也被選中。我試圖找到解決辦法,但不能。

+0

感謝您的答案。但哪個位置是發送到ListView的初始位置?在啓動循環之前 –

0

那麼,適配器如何使用位置並傳輸所有項目而沒有某種循環?

總之,它沒有。這正是發生的情況。

Android框架已將創建列表的過程分成幾個不同的部分。我們關心的是ListViewAdapter

ListView的工作是詢問適配器如何將位置映射到View,然後使用該信息來正確佈局,測量和繪製這些位置View

Adapter的工作是告訴ListView如何將列表中的位置映射到View實例。由於Android框架負責在ListView中循環處理您的項目,因此您無需擔心自己這麼做 - 只需提供映射即可。

這裏是什麼ListView做的總體思路:

// Figure out how many children we have 
int numChildren = adapter.getCount(); 

for (int i = 0; i < numChildren; i++) { 
    // Get the view for this position 
    View childView = adapter.getView(i, null, this); 

    // Add it to ourselves 
    addView(childView); 
} 

這當然是高度簡化的,但什麼是有幕後適配器發生的一個好高水平的主意。

+0

感謝您的答案。但是哪個位置是發送到ListView的初始位置?在啓動循環之前 –

+0

開始循環之前沒有初始位置。第一次在適配器上調用'getView()'方法時,位置將成爲'ListView'中的第一個位置。所以如果你有20個項目,傳遞給getView()的第一個'position'將會是0。 –

相關問題