Android的ListView的使用图像和文本;无法显示的ListView [英] Android ListView with Image and Text; can't display 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:机器人=http://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:机器人=http://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:机器人=http://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:机器人=http://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屋!