Android的ListView的使用图像和文本;无法显示的ListView [英] Android ListView with Image and Text; can't display ListView

查看:224
本文介绍了Android的ListView的使用图像和文本;无法显示的ListView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用图片和文字显示的ListView,我已经使用Simpleadapter类,但我无法显示的ListView难道任何一个可以帮助我,我做错了什么?

下面我code:

 公共类HostsActivity扩展ListActivity {
    公共最后静态字符串ITEM_TITLE =称号;
    公共最后静态字符串ITEM_IMAGE =形象;
    私人列表< HostsProfile> hostsProfile1;
    列表与LT;地图<字符串,>>安全=新的LinkedList<地图<字符串,>>();

    @覆盖
    保护无效的onCreate(包savedInstanceState){
        // TODO自动生成方法存根
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.hostslist);

        捆绑recdData = getIntent()getExtras()。

        hostsProfile1 = recdData.getParcelableArrayList(hostsProfile);

        列表与LT;地图<字符串,>>安全1 =新的LinkedList<地图<字符串,>>();
        对于(HostsProfile MSG 1:hostsProfile1){
            // Log.v(图像,映像路径+ msg.getImage());
            尝试 {
                网址URL =新的URL(msg1.getMediathumbnail());
                HttpURLConnection的CON =(HttpURLConnection类)url.openConnection();
                InputStream的是= con.getInputStream();
                位图IMG = BitmapFactory.de codeStream(是);
                security.add(createItem中(msg1.getTitle(),IMG));
            }赶上(的Throwable T){
            }
        }
        / *的for(int i = 0; I< security.size();我++){
            security.remove(0);
        }
        * /
        SimpleAdapter适配器1 =新SimpleAdapter(这一点,安全1,
                R.layout.image_text_layout1,新的String [] {ITEM_IMAGE,
                        ITEM_TITLE},新的INT [] {R.id.feed_image,
                        R.id.job_text});
        adapter1.setViewBinder(新MyViewBinder());
        this.setListAdapter(适配器1);
    }

    公共地图<字符串,> createItem中(字符串标题,位图图像){
        地图<字符串,对象>项目=新的HashMap<字符串,对象>();
        item.put(ITEM_TITLE,职称);
        item.put(ITEM_IMAGE,图像);
        归还物品;
    }
    //为ImageView的
    类MyViewBinder实现ViewBinder {
        公共布尔setViewValue(查看视图,对象数据,
                字符串textRe presentation){
            如果((视图的instanceof ImageView的)及(数据的instanceof位图)){
                ImageView的此搜索=(ImageView的)观点;
                位图BM =(位图)数据;
                image1.setImageBitmap(BM);
                返回true;
            }
            返回false;
        }
    }

}
 

下面是我的布局XML文件:

image_text_layout1:

 < XML版本=1.0编码=UTF-8&GT?;

< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:方向=横向机器人:layout_width =FILL_PARENT
    机器人:layout_height =WRAP_CONTENT>

    < ImageView的机器人:ID =@ + ID / feed_image
        机器人:layout_width =60dp
        机器人:layout_height =60dp
        机器人:重力=center_vertical
        机器人:paddingRight =3DP
        机器人:以下属性来=2DP/>

    < TextView的机器人:ID =@ + ID / job_text
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =60dp
        机器人:文字颜色=#000000
        机器人:TEXTSTYLE =黑体
        机器人:重力=center_vertical/>
        !<  - 安卓paddingTop =5dip
        机器人:paddingBottom会=28DIP
        机器人:以下属性来=8DIP
        机器人:paddingRight =8DIP/>  - >

< / LinearLayout中>
 

hostslist.xml:

 < XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:方向=垂直
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =FILL_PARENT
    机器人:背景=@可绘制/背景
    >

    < RelativeLayout的
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =FILL_PARENT>

        <的LinearLayout
            机器人:ID =@ + ID / linearlayout01
            机器人:layout_width =300dp
            机器人:layout_height =45dp
            机器人:layout_marginLeft =10dp
            机器人:layout_marginRight =10dp
            机器人:layout_marginTop =52dp
            机器人:方向=垂直>
        < / LinearLayout中>

        <的ListView
            机器人:ID =@机器人:ID /列表
            机器人:layout_width =FILL_PARENT
            机器人:layout_height =230dp
            机器人:layout_alignParentRight =真
            机器人:layout_marginTop =107dp
            机器人:cacheColorHint =#00000000>

        < / ListView控件>

    < / RelativeLayout的>

< / LinearLayout中>
 

解决方案

请在 CustomListview 的项目:

CustomListView.java

 包com.example.customlistview;

进口的java.util.ArrayList;

进口android.os.Bundle;
进口android.widget.ListView;
进口android.app.Activity;

公共类CustomListView延伸活动{
    ArrayList的<联系与GT; imageArry =新的ArrayList<联系与GT;();
    ContactImageAdapter适配器;

    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);
        //添加图片和文字中的ArrayList
        imageArry.add(新联系(R.drawable.facebook,脸谱));
        imageArry.add(新联系(R.drawable.google,谷歌));
        imageArry.add(新联系(R.drawable.ical,ICAL));
        imageArry.add(新联系(R.drawable.outlook,展望));
        imageArry.add(新联系(R.drawable.twitter,推特));
        //增加接触图像适配器数据
        适配器=新ContactImageAdapter(这一点,R.layout.list,imageArry);
        ListView控件DataList控件=(ListView控件)findViewById(R.id.list);
        dataList.setAdapter(适配器);
    }
}
 

Contact.java

 包com.example.customlistview;
公共类联系
{
    INT形象;
    字符串名称;

    公众诠释的getImage(){
        返回形象;
    }

    公共无效setImage(INT图像){
        this.image =图像;
    }

    公共字符串的getName(){
        返回名称;
    }

    公共无效setname可以(字符串名称){
        this.name =名称;
    }

    公共联系(INT图像,字符串名称){
        超();
        this.image =图像;
        this.name =名称;
    }
}
 

ContactImageAdapter.java

 包com.example.customlistview;

进口的java.util.ArrayList;

进口android.app.Activity;
进口android.content.Context;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.ArrayAdapter;
进口android.widget.ImageView;
进口android.widget.TextView;

公共类ContactImageAdapter扩展ArrayAdapter<联系与GT; {
    上下文语境;
   INT layoutResourceId;
   ArrayList的<联系与GT;数据=新的ArrayList<联系与GT;();
   公共ContactImageAdapter(上下文的背景下,诠释layoutResourceId,ArrayList的<联系与GT;数据){
       超级(上下文,layoutResourceId,数据);
       this.layoutResourceId = layoutResourceId;
       this.context =背景;
       this.data =数据;
   }

   @覆盖
   公共查看getView(INT位置,查看convertView,ViewGroup中父){
       查看排= convertView;
       imageHolder的持有人= NULL;

       如果(行== NULL)
       {
           LayoutInflater充气=((活动)上下文).getLayoutInflater();
           行= inflater.inflate(layoutResourceId,父母,假);

           持有人=新imageHolder的();
           holder.txtTitle =(TextView中)row.findViewById(R.id.txtTitle);
           holder.imgIcon =(ImageView的)row.findViewById(R.id.imgIcon);
           row.setTag(保持器);
       }
       其他
       {
           支架=(imageHolder的)row.getTag();
       }

       联系MYIMAGE = data.get(位置);
       holder.txtTitle.setText(myImage.name);
       INT outImage = myImage.image;
       holder.imgIcon.setImageResource(outImage);
      返回行;

   }

   静态类imageHolder的
   {
       ImageView的imgIcon;
       TextView的txtTitle;
   }
}
 

main.xml中

 < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =WRAP_CONTENT
    机器人:方向=横向>

    <的ListView
        机器人:ID =@ + ID /列表
        机器人:layout_width =0dp
        机器人:layout_height =FILL_PARENT
        机器人:layout_weight =0.55>
    < / ListView控件>
< / LinearLayout中>
 

list.xml

 < XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =FILL_PARENT
    机器人:方向=横向
    机器人:填充=10dp>< ImageView的
        机器人:ID =@ + ID / imgIcon
        机器人:layout_width =0dp
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_weight =0.71
        机器人:重力=center_vertical/>
     <的TextView
        机器人:ID =@ + ID / txtTitle
        机器人:layout_width =80dp
        机器人:layout_height =FILL_PARENT
        机器人:重力=center_vertical
        机器人:TEXTSIZE =14dp
        机器人:layout_marginLeft =7DP/>
      < / LinearLayout中>
 

在drwable

把图标,它被用来在主活动图像阵列中。

I am trying to display ListView with Image and text,I have used Simpleadapter class,But I am unable to display ListView Could any one help me,what i did wrong?

Here My Code:

public class HostsActivity extends ListActivity {
    public final static String ITEM_TITLE = "title";
    public final static String ITEM_IMAGE = "Image";
    private List<HostsProfile> hostsProfile1;
    List<Map<String, ?>> security = new LinkedList<Map<String, ?>>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hostslist);

        Bundle recdData = getIntent().getExtras();

        hostsProfile1 = recdData.getParcelableArrayList("hostsProfile");

        List<Map<String, ?>> security1 = new LinkedList<Map<String, ?>>();
        for (HostsProfile msg1 : hostsProfile1) {
            // Log.v("image","Image path"+msg.getImage());
            try {
                URL url = new URL(msg1.getMediathumbnail());
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                InputStream is = con.getInputStream();
                Bitmap img = BitmapFactory.decodeStream(is);
                security.add(createItem(msg1.getTitle(), img));
            } catch (Throwable t) {
            }
        }
        /*for(int i=0; i<security.size(); i++){
            security.remove(0);
        }
        */
        SimpleAdapter adapter1 = new SimpleAdapter(this, security1,
                R.layout.image_text_layout1, new String[] { ITEM_IMAGE,
                        ITEM_TITLE }, new int[] { R.id.feed_image,
                        R.id.job_text });
        adapter1.setViewBinder(new MyViewBinder());
        this.setListAdapter(adapter1);
    }

    public Map<String, ?> createItem(String title, Bitmap Image) {
        Map<String, Object> item = new HashMap<String, Object>();
        item.put(ITEM_TITLE, title);
        item.put(ITEM_IMAGE, Image);
        return item;
    }
    //for ImageView
    class MyViewBinder implements ViewBinder {
        public boolean setViewValue(View view, Object data,
                String textRepresentation) {
            if ((view instanceof ImageView) & (data instanceof Bitmap)) {
                ImageView image1 = (ImageView) view;
                Bitmap bm = (Bitmap) data;
                image1.setImageBitmap(bm);
                return true;
            }
            return false;
        }
    }

}

Here are my layout xml files:

image_text_layout1:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <ImageView android:id="@+id/feed_image"
        android:layout_width="60dp" 
        android:layout_height="60dp"
        android:gravity="center_vertical"
        android:paddingRight="3dp"
        android:paddingLeft="2dp"/>

    <TextView android:id="@+id/job_text" 
        android:layout_width="wrap_content"
        android:layout_height="60dp" 
        android:textColor="#000000"
        android:textStyle="bold"
        android:gravity="center_vertical"/>
        <!--android:paddingTop="5dip"
        android:paddingBottom="28dip" 
        android:paddingLeft="8dip"
        android:paddingRight="8dip" />-->

</LinearLayout>

hostslist.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background"
    >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <LinearLayout
            android:id="@+id/linearlayout01"
            android:layout_width="300dp"
            android:layout_height="45dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="52dp"
            android:orientation="vertical" >
        </LinearLayout>

        <ListView
            android:id="@android:id/list"
            android:layout_width="fill_parent"
            android:layout_height="230dp"
            android:layout_alignParentRight="true"
            android:layout_marginTop="107dp"
            android:cacheColorHint="#00000000">

        </ListView>  

    </RelativeLayout>

</LinearLayout>

解决方案

Make a CustomListview project:

CustomListView.java

package com.example.customlistview;

import java.util.ArrayList;

import android.os.Bundle;
import android.widget.ListView;
import android.app.Activity;

public class CustomListView extends Activity {
    ArrayList<Contact> imageArry = new ArrayList<Contact>();
    ContactImageAdapter adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // add image and text in arraylist
        imageArry.add(new Contact(R.drawable.facebook, "FaceBook"));
        imageArry.add(new Contact(R.drawable.google, "Google"));
        imageArry.add(new Contact(R.drawable.ical, "Ical"));
        imageArry.add(new Contact(R.drawable.outlook, "Outlook"));
        imageArry.add(new Contact(R.drawable.twitter, "Twitter"));
        // add data in contact image adapter
        adapter = new ContactImageAdapter(this, R.layout.list, imageArry);
        ListView dataList = (ListView) findViewById(R.id.list);
        dataList.setAdapter(adapter);
    }
}

Contact.java

package com.example.customlistview;
public class Contact
{
    int image;
    String name;

    public int getImage() {
        return image;
    }

    public void setImage(int image) {
        this.image = image;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Contact(int image, String name) {
        super();
        this.image = image;
        this.name = name;
    }
}

ContactImageAdapter.java

package com.example.customlistview;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ContactImageAdapter extends ArrayAdapter<Contact> {
    Context context;
   int layoutResourceId;
   ArrayList<Contact> data=new ArrayList<Contact>();
   public ContactImageAdapter(Context context, int layoutResourceId, ArrayList<Contact> data) {
       super(context, layoutResourceId, data);
       this.layoutResourceId = layoutResourceId;
       this.context = context;
       this.data = data;
   }

   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
       View row = convertView;
       ImageHolder holder = null;

       if(row == null)
       {
           LayoutInflater inflater = ((Activity)context).getLayoutInflater();
           row = inflater.inflate(layoutResourceId, parent, false);

           holder = new ImageHolder();
           holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
           holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
           row.setTag(holder);
       }
       else
       {
           holder = (ImageHolder)row.getTag();
       }

       Contact myImage = data.get(position);
       holder.txtTitle.setText(myImage.name);
       int outImage=myImage.image;
       holder.imgIcon.setImageResource(outImage);
      return row;

   }

   static class ImageHolder
   {
       ImageView imgIcon;
       TextView txtTitle;
   }
}

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ListView
        android:id="@+id/list"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="0.55" >
    </ListView>
</LinearLayout>

list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:padding="10dp" ><ImageView
        android:id="@+id/imgIcon"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.71"
        android:gravity="center_vertical"/>
     <TextView
        android:id="@+id/txtTitle"
        android:layout_width="80dp"
        android:layout_height="fill_parent"
        android:gravity="center_vertical"
        android:textSize="14dp"
        android:layout_marginLeft="7dp" />
      </LinearLayout>

Put icon in drwable, which is used in the main activity image array.

这篇关于Android的ListView的使用图像和文本;无法显示的ListView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆