2010-06-14 306 views
0

所有,Android ListView:getTag()返回NULL

我有一個ListView,其中包含每行中的一個按鈕。下面的代碼是getView()方法

public View getView(final int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     TextView tv; 
     Button saveA_button; 
     EditText edittext; 
     FITB_ViewWrapper wrapper; 

    if (row == null) { 
     LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (ChooseMode_Act.modeInfo.equalsIgnoreCase("Training")) { 
      row = li.inflate(R.layout.exercise_for_training_fitb,parent, false); 
     }else { 
       row = li.inflate(R.layout.exercise_for_exam_fitb,parent, false); 
     } 
     wrapper=new FITB_ViewWrapper(row); 
     row.setTag(wrapper); 
     if (ChooseMode_Act.modeInfo.equalsIgnoreCase("Exam")) { 
      saveA_button=wrapper.getSaveAnswer_Button(); 
      OnClickListener l=new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        Integer mp=(Integer)v.getTag(); 
        Log.i("mp","my Position is: "+mp); 
       } 
      }; 
      saveA_button.setOnClickListener(l); 
     } 
    }else { 
      wrapper=(FITB_ViewWrapper) row.getTag(); 
} 

的一部分。我的應用程序,我需要知道的按鈕屬於哪個項目,所以我嘗試檢測到它。該代碼

拿出一條消息:熔點myPosition是:空

我不明白,爲什麼我得到一個「零」,而不是一個整數?我怎樣才能找到一個項目在ListView中的位置?

非常感謝。

回答

3

Log.i(「mp」,「my Position is:」+ position);

你已經有位置了!

public View getView(final int position, View convertView, ViewGroup parent) { 
+0

哦,是啊!它仍然很好理解ListViews如何工作,正如我在我的答案中所述,但這似乎是更簡單的解決方案。當你已經擁有這個位置時,沒有必要在標籤上亂搞。 – 2010-06-14 21:35:17

0

ListView中的視圖在您向上和向下滾動時重複使用。因此,在getView中設置值通常會產生無法預料的後果,例如,您爲項目編號5中出現的圖像設置了10,15和20。

爲了避免這種情況,如果你想在getView中設置屬性,你需要確保你爲每個視圖設置或取消設置。

我不確定你想要用代碼完成什麼工作,但它可能有助於將setTag移到if語句之外,以確保每次使用視圖時都設置它。

+0

你是對的,行被重複使用作爲一個向上和向下滾動。在我的App中,每個ListView Item都包含一個問題(TextView)和一個EditText,應該可以在這個EditText視圖中輸入他的答案。現在我可以在EditText視圖中輸入我的答案,例如在第5行中。但是,每當我滾動ListView並再次返回到Item時,我的答案已消失或顯示在錯誤的行中,例如第10行。在每一行中添加一個按鈕視圖。如果點擊按鈕,編輯文本視圖中的用戶輸入應保存到數組中。但它也行不通。因爲我無法檢測到正確的行。 – TianDong 2010-06-15 22:04:12

+0

我想要的只是讓用戶輸入正確顯示並將用戶輸入保存到數組中,而不管用戶如何在列表視圖中上下滾動。我已經嘗試了一個多星期來解決這個問題,但沒有成功。請幫幫我!非常感謝。 – TianDong 2010-06-15 22:08:33

+0

您是否嘗試了Jorgesys的建議以查找該行?而不是將信息存儲在標籤中,只需使用作爲函數參數提供的位置即可。 – 2010-06-15 22:49:09