Android ListView:getTag()返回NULL

问题描述:

所有,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中的位置?

非常感谢。

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

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