【问题标题】:how to get position of arraylist in own adapter如何在自己的适配器中获取arraylist的位置
【发布时间】:2012-04-17 19:40:39
【问题描述】:

我想将数组列表(项目)的位置设置到我自己的列表视图适配器中。

 holder.txtViewTitle.setText(title.get(position)); 

但我得到了错误。 请检查以下代码。

我也得到了 setImageResource 的错误。

 holder.imgViewLogo.setImageResource(images[position]);  

谢谢。

public class LazyAdapter extends BaseAdapter{

private activites context;
private ArrayList<String> title;
private String[] images;
private LayoutInflater inflater;


public LazyAdapter(activites activites,String[] img ,ArrayList<String> items) {  
    super();  

    this.context = activites;  
    this.title = items;  
    this.images = img; 

}  

@Override  
public int getCount() {  
    // TODO Auto-generated method stub  
    return title.size();  
}  

@Override  
public Object getItem(int position) {  
    // TODO Auto-generated method stub  
    return null;  
}  

@Override  
public long getItemId(int position) {  
    // TODO Auto-generated method stub  
    return 0;  
}  

public static class ViewHolder  
{  
    ImageView imgViewLogo;  
    TextView txtViewTitle;  

}  

@Override  
public View getView(int position, View convertView, ViewGroup parent) {  
    // TODO Auto-generated method stub  

    ViewHolder holder;  
    if(convertView==null)  
    {  
        holder = new ViewHolder();  
        convertView = inflater.inflate(R.layout.activity_listitem, null);  

        holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.activity_list_logo);  
        holder.txtViewTitle = (TextView) convertView.findViewById(R.id.activity_list_title);  

        convertView.setTag(holder);  
    }  
    else  
        holder=(ViewHolder)convertView.getTag();  

    holder.imgViewLogo.setImageResource(images[position]);  
    holder.txtViewTitle.setText(title.get(position));  


    return convertView;  
}   

}

【问题讨论】:

  • 如果你得到error.post logcat,,,
  • 你能把堆栈跟踪粘贴到这里吗,还有你用来创建项目和img的代码
  • I got the error 你希望别人怎么猜这是什么错误?认真的吗?

标签: android listview arraylist adapter


【解决方案1】:

这是我认为的问题:

    private String[] images;

你应该声明它:

   private Integer[] images;

希望这会有所帮助

【讨论】:

    【解决方案2】:

    以下覆盖方法中的小修正。试试这个,让我知道

    @Override  
    public int getCount() {  
        // TODO Auto-generated method stub  
        return title.size();  
    }  
    
    @Override  
    public Object getItem(int position) {  
        // TODO Auto-generated method stub  
        return position;  
    }  
    @Override  
    public long getItemId(int position) {  
        // TODO Auto-generated method stub  
        return position;  
    }  
    

    【讨论】:

      【解决方案3】:
      public class LazyAdapter extends BaseAdapter{
      
      private activites context;
      private ArrayList<String> title;
      private String[] images;
      private LayoutInflater inflater;
       Bitmap myBitmap;
      
      
      public LazyAdapter(activites activites,String[] img ,ArrayList<String> items) {  
          super();  
      
          this.context = activites;  
          this.title = items;  
          this.images = img; 
      
      }  
      
      @Override  
      public int getCount() {  
          // TODO Auto-generated method stub  
          return title.size();  
      }  
      
      @Override  
      public Object getItem(int position) {  
          // TODO Auto-generated method stub  
          return null;  
      }  
      
      @Override  
      public long getItemId(int position) {  
          // TODO Auto-generated method stub  
          return 0;  
      }  
      
      public static class ViewHolder  
      {  
          ImageView imgViewLogo;  
          TextView txtViewTitle;  
      
      }  
      
      @Override  
      public View getView(int position, View convertView, ViewGroup parent) {  
          // TODO Auto-generated method stub  
       try {
                            url = new URL(images[position]);
                            connection = (HttpURLConnection) url
                                          .openConnection();
      
                              connection.setDoInput(true);
      
      
                                  connection.connect();
                                   connection.setReadTimeout(120000);
                                   InputStream     input = connection.getInputStream();
                                   myBitmap = BitmapFactory.decodeStream(input);
      
                                  } catch (IOException e) {
                              e.printStackTrace();
                              return null;
                          }
          ViewHolder holder;  
          if(convertView==null)  
          {  
              holder = new ViewHolder();  
              convertView = inflater.inflate(R.layout.activity_listitem, null);  
      
              holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.activity_list_logo);  
              holder.txtViewTitle = (TextView) convertView.findViewById(R.id.activity_list_title);  
      
              convertView.setTag(holder);  
          }  
          else  
              holder=(ViewHolder)convertView.getTag();  
      
          holder.imgViewLogo.setImageBitmap(myBitmap);  
          holder.txtViewTitle.setText(title.get(position));  
      
      
          return convertView;  
      }   
      
      }
      

      【讨论】:

      • 对于您给定的解决方案,我遇到了同样的错误。 eclipse 给我警告改变 setImageResource();
      • ImageView 类型中的 setImageResource(int) 方法不适用于参数(Bitmap)。
      • 使用 holder.imgViewLogo.setImageBitmap(myBitmap);而不是 holder.imgViewLogo.setImageDrawable(myBitmap);.我认为会起作用。
      • 使用 holder.imgViewLogo.setImageBitmap(myBitmap);而不是 holder.imgViewLogo.setImageResource(myBitmap);.我认为会工作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 2020-12-12
      • 2018-04-27
      • 2013-04-16
      • 1970-01-01
      • 2021-07-05
      相关资源
      最近更新 更多