您的位置:首页 > 移动开发 > Android开发

Android中ListView的item中添加图片和文字

2012-03-19 23:01 429 查看
项目中要求listview中含有文字和图片,主要涉及到3个文件:HomeActivity1.java,homeactivity1.xml,listviewitemstyle.xml(item样式辅助文件,定义item布局)。

效果如下图:



-----------------------------------------------------------------------------------------------

1.HomeActivity1.java如下:

public class HomeActivity1 extends ListActivity {
…… //变量定义,略
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.homeactivity1);
new GetSubject().execute();//获取表白主题,并显示在listview中
}
public class GetSubject extends AsyncTask<Void, Void, List<HashMap<String,Object>>> {
private Exception exception = null;
@Override
protected List<HashMap<String,Object>> doInBackground(Void... params) {
// TODO Auto-generated method stub
String xmlString = HttpXml.getSubject("do_get_subject", "0");
try {
spf = SAXParserFactory.newInstance();
data = http.doPost(xmlString, name,pass);//获取表白主题的xml报文形式
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
xr.setContentHandler(handler);
xr.parse(new InputSource(new ByteArrayInputStream(data
.getBytes())));
//将表白主题的xml报文解析后,返回List<HashMap<String,Object>>
//handler的解析很重要,其代码要关注
subjList = handler.getParsedData();
return subjList;
} catch (Exception e) {
exception = e;
return null;
}
}
@Override
protected void onPostExecute(List<HashMap<String,Object>> result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if (result == null) {
NotificationsUtil.ToastReasonForFailure(HomeActivity1.this, exception);
return;
}
//重要:继承了ListActivity的类中listview的id为android.R.id.list
listView = (ListView)findViewById(android.R.id.list);
//关键:SimpleAdapter 可以使listview中的item形式多样
SimpleAdapter adapter = new SimpleAdapter(HomeActivity1.this, result, R.layout.listviewitemstyle,
new String[]{"subject","image"}, new int[]{R.id.tvitem,R.id.imgitem});
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
Intent intent = new Intent();
intent.setClass(HomeActivity1.this, HomeActivity.class);
intent.putExtra("itemText",
String.valueOf(listView.getItemAtPosition(position)));
Log.v("itemText", String.valueOf(listView.getItemAtPosition(position)));
startActivity(intent);
}
});
}

@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
//setLoadingView();
http = new FourspaceHttp();
//handler = new MsgHandler();
handler = new SubjHandler();
subjList = new ArrayList<HashMap<String,Object>>();//list将包含表白主题和图片,显示在listview中
prefs = PreferenceManager.getDefaultSharedPreferences(HomeActivity1.this);
}
}
…………//其他代码,略
}

2.homeactivity1.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_marginTop="10dp"
android:minHeight="3dip" android:layout_gravity="center_horizontal"
android:layout_width="260dp" android:layout_height="360dp">
//重要:继承了ListActivity的类中listview在布局文件中的id为@id/android:list
<ListView android:id="@id/android:list" android:cacheColorHint="#00000000"
android:background="@color/white" android:minHeight="3dip"
android:divider="@color/gray" android:dividerHeight="0.5dp" android:stackFromBottom="true"
android:layout_width="wrap_content" android:layout_height="fill_parent"/>
</RelativeLayout>
</LinearLayout>

3.listviewitemstyle.xml如下,定义了listview的item中含有1个文本和1个图片:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
//此处设置的即为item的背景图,item设置背景图后可实现点击item中任意位置都触发事件
android:background="@drawable/toolbar_bg"
android:layout_width="wrap_content" android:layout_height="wrap_content">
<TextView android:id="@+id/tvitem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/gray"
android:gravity="center_vertical"
android:paddingLeft="6dip" />
<ImageView
android:id="@+id/imgitem" android:contentDescription="@string/app_name"
android:layout_width="wrap_content" android:layout_height="wrap_content"/>
</LinearLayout>

-----------------------------------------------------------------------------------------------

小结:

实现该效果的关键是:1..要使用SimpleAdapter,且其要用到item样式辅助文件和List<HashMap<String,Object>>;3.handler解析要正确;4.注意要继承ListActivity。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: