在getView()方法中使用if / switch语句时,CustomListViewAdapter行为不正常

时间:2013-12-21 02:41:24

标签: java android android-listview android-arrayadapter

我正在使用ListView处理这个Android应用程序。我为它创建了一个自定义适配器,我想要做的是在列表视图的第一行(列表的第0行)为TextView设置onClickListener。只有这个项目的TextView应该有一个监听器。但是当我输入if或者switch语句时,事情就失控了,位置0的行与位置2的行共享这个位置,所以第二行的textview也会得到一个监听器。我有4行所以之后行变成了0,1,2而不是0,1,2,3。任何可能导致这种情况的想法?

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


      ViewHolder holder=null;

      LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

      if(convertView==null)
      {
          holder = new ViewHolder();

          convertView = mInflater.inflate(R.layout.contact_item, null);

          holder.imageViewPhoto = (ImageView) convertView.findViewById(R.id.image);
          holder.textViewName = (TextView) convertView.findViewById(R.id.namemain);
          holder.textViewProfession= (TextView) convertView.findViewById(R.id.profession);
          holder.textViewNumber = (TextView) convertView.findViewById(R.id.phone_number);
          holder.imageViewFacebook = (ImageView) convertView.findViewById(R.id.facebook);
          holder.imageViewTwitter = (ImageView) convertView.findViewById(R.id.twitter);
          holder.imageViewGoogle= (ImageView) convertView.findViewById(R.id.google);

          convertView.setTag(holder);
      }
      else{
          holder=(ViewHolder)convertView.getTag();
          Animation animation = new TranslateAnimation(0, 0, (position > lastPosition) ? 100 : -200, 0);
          animation.setDuration(400);
          convertView.startAnimation(animation);
      }

      Contact aContact = (Contact) getItem(position);

      holder.textViewName.setText(aContact.getName());
      holder.imageViewPhoto.setImageResource(aContact.getImageNumber());
      holder.textViewProfession.setText(aContact.getProfession());
      holder.textViewNumber.setText(aContact.getCellNumber());
      holder.imageViewFacebook.setImageResource(aContact.getImageFb());     
      holder.imageViewTwitter.setImageResource(aContact.getImageTwt());
      holder.imageViewGoogle.setImageResource(aContact.getImageGoo());


      if(position==0){

              holder.textViewProfession.setGravity(0x11);

              holder.textViewProfession.setOnClickListener(new View.OnClickListener() {

                  @Override
                  public void onClick(View v) {

                      Log.i("row"+getItemId(position)," "+position);


                  }
              });

      }


      lastPosition = position;

      return convertView;
  }

1 个答案:

答案 0 :(得分:0)

 if(position==0){

              holder.textViewProfession.setGravity(0x11);

              holder.textViewProfession.setOnClickListener(new View.OnClickListener() {

                  @Override
                  public void onClick(View v) {

                      Log.i("row"+getItemId(position)," "+position);


                  }
              });

      }
else{
              holder.textViewProfession.setGravity(0x11);

              holder.textViewProfession.setOnClickListener(null);
}

如果你使用viewHolder那么它必须编写两个案例if和else for textview才能正确处理...试试这个它只适用于Zeroth项...