图像和文本在listview-Android中单独显示使用Image Loader

时间:2014-04-10 11:46:19

标签: android listview adapter

我正在尝试使用imageLoader通过url加载图像和文本当我在listview中填充它时 显示enter image description here

时,图像和文本是分开的

这是我的代码

mall=getIntent().getStringArrayListExtra("text");
      mallpos=getIntent().getStringArrayListExtra("Ima");
      System.out.println("Images"+mallpos);

      System.out.println(mall.size());
      for(int i=0;i<mall.size();i++)
      {
          poss=mall.get(i);
          System.out.println("value"+poss);
          dto =new locationdto();
          dto.setMallname(poss);
          rou.add(dto);

      }
      System.out.println(mallpos.size());
      for(int i=0;i<mallpos.size();i++)
      {
          Ima=mallpos.get(i);
          System.out.println("value"+Ima);
          dto=new locationdto();
          dto.setImage(Ima);
          System.out.println("imaghe"+ dto.getImage());
          rou.add(dto);

      }

      lv=(ListView)findViewById(R.id.listm);


      System.out.println("Arraysize#############" + rou.size());
      System.out.println("Arraysize#############" + rou1.size());

      MaterialMasterAdapter adapteer =new MaterialMasterAdapter(MalllistActivity.this, rou);
      lv.setAdapter(adapteer);

这是我的适配器代码,我无法纠正错误

import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class MaterialMasterAdapter extends BaseAdapter
{

    Holder mHolder = null;
    private Context mContext;
    locationdto dto = new locationdto();
    ArrayList<locationdto> a1;
    ArrayList<locationdto> arr =new ArrayList<locationdto>();

    String a2;
    String[] imageurl=null;
    ImageLoader imageLoader;

String s;
String urlss;

    public MaterialMasterAdapter(Context c,ArrayList<locationdto> arrList1   ) {
        // TODO Auto-generated constructor stub
        mContext=c;
        a1=arrList1;
        ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(mContext));

    }

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

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return a1.get(position);
    }

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

    public View getView(int pos, View child, ViewGroup parent) 
    {
        // TODO Auto-generated method stub
        Holder mHolder;
        LayoutInflater layoutInflater;

        if (child == null) 
        {
            layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            child = layoutInflater.inflate(R.layout.list_layout, null);
            mHolder = new Holder();         
            mHolder.txtitemid = (TextView) child.findViewById(R.id.artist);
            mHolder. imageView = (ImageView) child.findViewById(R.id.list_image);

            child.setTag(mHolder);

        } else 
        {
            mHolder = (Holder) child.getTag();
        }

        dto=a1.get(pos);
        String url=dto.getImage();


        mHolder.txtitemid.setText(dto.getMallname());
        ImageLoader.getInstance().displayImage(url, mHolder.imageView);

        return child;
    }


    public class Holder 
    {
        TextView txtitemid,txtmat,txtqty,image;
        ImageView imageView;
    }
}

4 个答案:

答案 0 :(得分:0)

在您的活动中,您可以在ArrayList中成功添加项目:首先循环文本,然后每次添加一个对象。然后,你循环图像(我想),你添加只有图像的新对象......

为什么不使用一个包含图像和文本的对象? 这样的事情:

public class MyObject{
public final String mText;
public final String mImageUrl;
public MyObject(String text, String image){
mText = text;
mImageUrl = image;
}
}

然后(即使我认为在前一个活动中实例化你的对象并在你的MyObject类中实现Parcelable会更好),你将在你的适配器中发送你的ArrayList ......

编辑:因为在您当前的代码中:每个文本都有一个条目,每个图像都有一个条目,分开......

答案 1 :(得分:0)

您发布的代码没有提供正确的信息,但根据我的理解,您可以按照此说明操作。 在适配器的get view方法中定义文本视图和图像视图。 调用此适配器时发送包含图像和文本的数据。 看到这个。

 public class MyItemsAdapter {
 ArrayList<UploadItem> dataList;
 Context context;
 public MyitemListAdapter2(ArrayList<UploadItem> list,Context con){
    this.dataList = list;
    this.context = con;     
    ImageLoaderConfiguration config = new             ImageLoaderConfiguration.Builder(context).build();
    ImageLoader.getInstance().init(config);
    im = ImageLoader.getInstance();         
}

@Override
public int getCount() {
    return dataList.size();
}

 @Override
public Object getItem(int arg0) {
    return null;
}

@Override
public long getItemId(int arg0) {
    return arg0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final UploadItem thisItem = dataList.get(position);
      if(convertView == null){          
        convertView =   inflater.inflate(R.layout.my_item_list_row2, parent,false);
    TextView text = (TextView) convertView.findViewById(R.id.text);
    ImageView image = (ImageView_ convertView.findViewByID(R.id.image);

    String path = thisItem.get(position).getImagePath();
    im.displayImage(path, image);
    text.setText(thisItem.getDescritption());
  } 
  }   

通过发送所需数据来调用适配器。并设置为列表视图。 这里使用通用图像加载程序异步加载图像..你也可以根据自己的意愿使用其他加载器 希望这有帮助

答案 2 :(得分:0)

实际上你要把你的rou发送到你的Adapter类你初始化两个for循环第一个循环只是在列表项中添加两个String并且第二个循环在列表视图中添加两个图像视图你正在添加两个东西Seperately

答案 3 :(得分:0)

将两个arraylist连接成单个`

 if (mall.size()  != mallpos.size()) { // Too many names, or too many numbers
            // Fail
        }
        for (int i = 0; i < mall.size(); i++) { // Loop through every name/phone number combo
            array3.add(mall.get(i) + " " + mallpos.get(i)); // Concat the two, and add it
            v=mall.get(i);
            n=mallpos.get(i);
            dto =new locationdto();
              dto.setMallname(v);
              dto.setImage(n);

              rou.add(dto);

        }

摘自how-to-concat-2-arraylists