java - 在 getView() 方法中使用 if/switch 语句时 CustomListViewAdapter 行为不当

标签 java android android-listview android-arrayadapter

我正在使用 ListView 开发这个 Android 应用程序。我为此创建了一个自定义适配器,我想做的是为 ListView 第一行(列表的第 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;
  }

最佳答案

 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才能使textview正确处理...尝试一下,它仅适用于第零个项目...

关于java - 在 getView() 方法中使用 if/switch 语句时 CustomListViewAdapter 行为不当,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20714849/

相关文章:

java - 如果给定两个十六进制数,用格雷码判断它们是否可以连续

android - Jenkins 无法连接到安卓模拟器

java - 异步加载内容时闪烁

android - OnTouchListener 的 Ontouch 事件在 android 中被调用两次

android - 在 fragment : "The specified child already has a parent. You must call removeView() on the child' s parent first"中使用数据绑定(bind)时出现异常

android - 如何使用适配器在单击按钮时添加 ListView 项目

java - 向 ListView 添加更多元素 "overwrites"当前 ListView

java - If 语句检查用户输入的字符串是否包含用户输入的字母,不包括任何额外字母

java - 如何测试 Weka 文本分类 (FilteredClassifier)

java - 处理文件的锁定部分 (Java)