【问题标题】:android- listview adapter not returning correct positionandroid-listview 适配器没有返回正确的位置
【发布时间】:2018-06-18 12:59:14
【问题描述】:

我的列表视图有一个包含 3 个元素的行文件。行左侧的名称。一个 Imageview(指示转到下一页的右箭头)和一个主要的 LinearLayout,我在其中放置了这些项目。

这是我的适配器的 getView() 方法..

@Override

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

        if(convertView==null){     

        convertView=LayoutInflater.from(context).inflate(R.layout.activity_row_mail_category,null);
        holder=new Holder();
        setView(convertView,position);
        convertView.setTag(holder);
    }
    else {
        holder= (Holder) convertView.getTag();
        setView(convertView,position);
    }

    holder.Name.setText(mailCategoryArrayList.get(position).getCat_name());

    return convertView;
}

Holder 是我在 adpater 本身中创建的静态类。

static class Holder{

    TextView Name;
    ImageView next;
    LinearLayout mainLayout;
}

这是我从 getView 调用的 setView 方法

private void setView(final View convertView,final int position) {

    holder.Name = (TextView) convertView.findViewById(R.id.listview_row_title);
    holder.next = (ImageView) convertView.findViewById(R.id.next);
    holder.main = (LinearLayout) convertView.findViewById(R.id.main);

    holder.next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view)

          Log.e("tag","Position:"+position);

        }
    });

    holder.mailCategoryMain.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            holder.next.performClick();

    });

每当我运行应用程序并单击布局时,我都会将位置作为 arrayList 的最后一个索引,但是当我单击 imageview 时,我会得到正确的位置。那么 performClick() 函数有什么问题,当我只是告诉 android 以编程方式而不是手动单击图像视图时,为什么会发生这种情况?

【问题讨论】:

    标签: android listview arraylist android-adapter


    【解决方案1】:

    setView()函数中初始化你的holder会解决问题

    private void setView(final View convertView,final int position) {
    
        Holder holder = new holder();
        holder.Name = (TextView) convertView.findViewById(R.id.listview_row_title);
        holder.next = (ImageView) convertView.findViewById(R.id.next);
        holder.main = (LinearLayout) convertView.findViewById(R.id.main);
    
        holder.next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view)
    
              Log.e("tag","Position:"+position);
    
            }
        });
    
        holder.mailCategoryMain.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                holder.next.performClick();
    
        });
    

    在您的代码中,您使用的 instanceholder 相同,它会保存最后一个值,希望对您有所帮助

    【讨论】:

      【解决方案2】:
      public View getView(int position, View convertView, ViewGroup parent) {
      Holder holder;
          if(convertView==null){     
      
          convertView=LayoutInflater.from(context)
          .inflate(R.layout.activity_row_mail_category,null);
      
          holder=new Holder();
          holder.Name.setText(mailCategoryArrayList.get(position).getCat_name());
          holder.Name = (TextView) convertView.findViewById(R.id.listview_row_title);
          holder.next = (ImageView) convertView.findViewById(R.id.next);
          holder.main = (LinearLayout) convertView.findViewById(R.id.main);
          convertView.setTag(holder);
          }else {
             holder= (Holder) convertView.getTag();
          }
      
          holder.next.setTag(position);//To avoid finalize
          holder.next.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view)
             Integer pos=(Integer)view.getTag();
             Log.e("tag","Position:"+pos);
      
             }
          });
      
          holder.mailCategoryMain.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
                 holder.next.performClick();
      
          });
      return convertView;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-28
        相关资源
        最近更新 更多