Android ListView:getTag()返回null

时间:2010-06-14 20:56:47

标签: android listview null

你好,

我有一个ListView,每行包含一个Button。以下代码是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();
 }

对于我的应用程序,我需要知道Button属于哪个项目,所以我尝试检测它。代码

Log.i("mp","my Position is: "+mp);

发出消息:mp myPosition is:null

我无法理解,为什么我会得到一个“null”而不是一个整数?如何在ListView中找到项目的位置?

非常感谢。

2 个答案:

答案 0 :(得分:3)

Log.i(“mp”,“我的位置是:”+位置);

你已经有了这个职位!

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

答案 1 :(得分:0)

在向上和向下滚动时,将重复使用ListView中的视图。因此,在getView中设置值通常会产生无意义的后果,例如您要为第10,15和20项中出现的第5项设置的图像。

为避免这种情况,如果要在getView中设置属性,则需要确保为每个视图设置或取消设置它们。

我不确定你要用你的代码完成什么,但是可能有助于将setTag移到if语句之外,以确保每次使用视图时都设置它。