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) {
ListView中的视图在您向上和向下滚动时重复使用。因此,在getView中设置值通常会产生无法预料的后果,例如,您为项目编号5中出现的图像设置了10,15和20。
为了避免这种情况,如果你想在getView中设置属性,你需要确保你为每个视图设置或取消设置。
我不确定你想要用代码完成什么工作,但它可能有助于将setTag移到if语句之外,以确保每次使用视图时都设置它。
你是对的,行被重复使用作为一个向上和向下滚动。在我的App中,每个ListView Item都包含一个问题(TextView)和一个EditText,应该可以在这个EditText视图中输入他的答案。现在我可以在EditText视图中输入我的答案,例如在第5行中。但是,每当我滚动ListView并再次返回到Item时,我的答案已消失或显示在错误的行中,例如第10行。在每一行中添加一个按钮视图。如果点击按钮,编辑文本视图中的用户输入应保存到数组中。但它也行不通。因为我无法检测到正确的行。 – TianDong 2010-06-15 22:04:12
我想要的只是让用户输入正确显示并将用户输入保存到数组中,而不管用户如何在列表视图中上下滚动。我已经尝试了一个多星期来解决这个问题,但没有成功。请帮帮我!非常感谢。 – TianDong 2010-06-15 22:08:33
您是否尝试了Jorgesys的建议以查找该行?而不是将信息存储在标签中,只需使用作为函数参数提供的位置即可。 – 2010-06-15 22:49:09
哦,是啊!它仍然很好理解ListViews如何工作,正如我在我的答案中所述,但这似乎是更简单的解决方案。当你已经拥有这个位置时,没有必要在标签上乱搞。 – 2010-06-14 21:35:17