listview在加载不同的样式文件的时候,listview会有不同的样式布局显示,此时个人的经验使用实例:
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.AnimationDrawable;
import android.provider.ContactsContract.CommonDataKinds.Photo;
import android.provider.ContactsContract.Data;
import android.text.ClipboardManager;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.um.mplus.AddVoicesActivity;
import com.um.mplus.R;
import com.um.mplus.UMApplication;
import com.um.mplus.VoicesInfoActivity;
import com.um.mplus.data.DataManageInterface.ItemBean;
import com.um.mplus.util.VoicesRecord;
public class VoiceInfoAdapter extends BaseAdapter {
private String TAG = "VoiceInfoAdapter";
final int VIEW_TYPE =7;
final int TYPE_0= 0;
final int TYPE_1 = 1;
final int TYPE_2 = 2;
final int TYPE_3= 3;
final int TYPE_4 = 4;
final int TYPE_5= 5;
final int TYPE_6 = 6;
public VoiceInfoAdapter(VoicesInfoActivity con, VoicesRecord voice) {
mContext = con;
}
public void setData(List<ItemBean> ls) {
mList = ls;
}
public void clearData() {
if (mList != null) {
mList.clear();
}
}
@Override
public int getCount() {
if (mList != null) {
return mList.size();
}
return 0;
}
@Override
public Object getItem(int position) {
if (mList != null) {
return mList.get(mList.size() - 1 - position);
}
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
int type=super.getItemViewType(position);
ItemBean item = mList.get(mList.size() - 1 - position);
if (item != null) {
if (item.rimType == 0) {
if (item.type == 1) {
type=0;
} else if (item.type == 2) {
type=1;
}
} else if (item.rimType == 1) {
if (item.type == 1) {
type=2;
} else if (item.type == 2) {
type=3;
}
} else if (item.rimType == 2) {
if (item.type == 1) {
type=4;
} else if (item.type == 2) {
type=5;
}
}else if(item.rimType == 4){
type=6;
}
}
return type;//这里根据不同的item的布局类型来做判断
}
@Override
public int getViewTypeCount() {//这里需要返回需要集中布局类型,总大小为类型的种数的下标
return VIEW_TYPE;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (position < mList.size()) {
ItemBean item = mList.get(mList.size() - 1 - position);
if (item != null) {
int viewType=getItemViewType(position);
if (viewType ==TYPE_FROM_SYS_TEXT) {// system text
final ViewHolderFromSysText holder_from_sys_text;
if (convertView == null) {
holder_from_sys_text = new ViewHolderFromSysText();
convertView = LayoutInflater
.from(mContext)
.inflate(
R.layout.voices_info_item_from_systext,
null);
holder_from_sys_text.tv_content = (UMTextView) convertView
.findViewById(R.id.voices_info_item_content);
convertView.setTag(holder_from_sys_text);
} else {
holder_from_sys_text = (ViewHolderFromSysText) convertView
.getTag();
}
if (item.content == null) {
item.content = "";
}
if (item.read == 0) {
holder_from_sys_text.tv_unread
.setVisibility(View.VISIBLE);
} else {
holder_from_sys_text.tv_unread
.setVisibility(View.GONE);
}
holder_from_sys_text.tv_content.setTag(item);
holder_from_sys_text.tv_content
.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mLongClickItem = (ItemBean) v.getTag();
showDialog(mLongClickItem.name, false,v);
return false;
}
});
} else if (viewType ==TYPE_TO_SYS_TEXT) {
final ViewHolderToSysText holder_to_sys_text;
if (convertView == null) {
holder_to_sys_text = new ViewHolderToSysText();
convertView = LayoutInflater
.from(mContext)
.inflate(
R.layout.voices_info_item_to_systext,
null);
holder_to_sys_text.tv_content = (UMTextView) convertView
convertView.setTag(holder_to_sys_text);
} else {
holder_to_sys_text = (ViewHolderToSysText) convertView
.getTag();
}
if (item.content == null) {
item.content = "";
}
holder_to_sys_text.tv_content.setText("");
if(item.content.indexOf("http")>=0){
holder_to_sys_text.tv_content
.setText(item.content);
}else{
holder_to_sys_text.tv_content
.setSpanText(item.content);
}
} else if (viewType ==TYPE_FROM_VOICE_TEXT) {// from voices_text
final ViewHolderFromVoiceText holder_from_voice_text;
if (convertView == null) {
holder_from_voice_text = new ViewHolderFromVoiceText();
convertView = LayoutInflater.from(mContext).inflate(
R.layout.voices_info_item_from_voicetext,
null);
convertView.setTag(holder_from_voice_text);
} else {
holder_from_voice_text = (ViewHolderFromVoiceText) convertView
.getTag();
}
if (item.content == null) {
item.content = "";
}
holder_from_voice_text.tv_content.setText("");
if(item.content.indexOf("http")>=0){
holder_from_voice_text.tv_content
.setText(item.content);
}else{
holder_from_voice_text.tv_content
.setSpanText(item.content);
}
} else if (viewType ==TYPE_TO_VOICE_TEXT) {
final ViewHolderToVoiceText holder_to_voices_text;
if (convertView == null) {
holder_to_voices_text = new ViewHolderToVoiceText();
convertView = LayoutInflater
.from(mContext)
.inflate(
R.layout.voices_info_item_to_voicetext,
null);
convertView.setTag(holder_to_voices_text);
} else {
holder_to_voices_text = (ViewHolderToVoiceText) convertView
.getTag();
}
if (item.content == null) {
item.content = "";
}
holder_to_voices_text.tv_content.setText("");
if(item.content.indexOf("http")>=0){
holder_to_voices_text.tv_content
.setText(item.content);
}else{
holder_to_voices_text.tv_content
.setSpanText(item.content);
}
} else if (viewType==TYPE_FROM_VOICE_VOICE) {//from voices
final ViewHolderFromVoice holder_from_voice;
if (convertView == null) {
holder_from_voice = new ViewHolderFromVoice();
convertView = LayoutInflater
.from(mContext)
.inflate(
R.layout.voices_info_item_from_voice,
null);
convertView.setTag(holder_from_voice);
} else {
holder_from_voice = (ViewHolderFromVoice) convertView
.getTag();
}
holder_from_voice.photo.setImageBitmap(mPhotoImage);
if (item.date == null) {
item.date = "";
}
holder_from_voice.tv_time.setText(item.date.toString());
} else if (viewType==TYPE_TO_VOICE_VOICE) {//to voice
final ViewHolderToVoice holder;
if (convertView == null) {
convertView = LayoutInflater.from(mContext)
.inflate(
R.layout.voices_info_item_to_voice,
null);
holder = new ViewHolderToVoice();
holder.tv_content = (View) convertView
.findViewById(R.id.voices_info_item_content);
convertView.setTag(holder);
} else {
holder = (ViewHolderToVoice) convertView.getTag();
}
if (item.date == null) {
item.date = "";
}
holder.tv_duration.setText(item.voicesLenght + "''");
}else if(viewType ==TYPE_FROM_SYS_APP){//system app voices
final ViewHolderFromVoice holder_from_voice;
if (convertView == null) {
holder_from_voice = new ViewHolderFromVoice();
convertView = LayoutInflater
.from(mContext)
.inflate(
R.layout.voices_info_item_from_app,
null);
holder_from_voice.view_content = convertView
.findViewById(R.id.voices_info_item_content);
convertView.setTag(holder_from_voice);
} else {
holder_from_voice = (ViewHolderFromVoice) convertView.getTag();
}
if (item.content == null) {
item.content = "";
}
holder_from_voice.tv_time.setText(item.date.toString());
}
}
}
return convertView;
}
public class ViewHolderFromSysText {
UMTextView tv_content;
ImageView photo;
TextView tv_time;
TextView tv_unread;
//ImageView voices_info_source_line;
}
public class ViewHolderToSysText {
UMTextView tv_content;
TextView tv_time;
ImageView tv_unread;
ImageView source;
ProgressBar progress;
ImageView voices_info_source_line;
}
public class ViewHolderFromVoiceText {
UMTextView tv_content;
ImageView photo;
TextView tv_time;
TextView tv_unread;
//ImageView voices_info_source_line;
}
public class ViewHolderToVoiceText {
UMTextView tv_content;
TextView tv_time;
ImageView tv_unread;
ImageView source;
ProgressBar progress;
ImageView voices_info_source_line;
}
public class ViewHolderFromVoice {
View view_content;
ImageView photo;
TextView tv_duration;
TextView tv_time;
ImageView tv_unread;
//ImageView voices_info_source_line;
ImageView voice_undown;
ProgressBar progress_down;
}
public class ViewHolderToVoice {
View tv_content;
TextView tv_time;
TextView tv_duration;
ImageView paly_anim;
ImageView tv_unread;
ImageView source;
ProgressBar progress;
ImageView voices_info_source_line;
}
}
分享到:
相关推荐
根据实际需要实现listview动态加载不同布局
ListView加载不同布局.解决异常ClassCastException
android listView 分页加载
写的demo只有第一条item布局不一样,剩下的item布局都一样;主要用于实现在listview加上headview时又有下拉...所有就把原本listview要加的headview布局加到listview的item布局中;这样在加下拉刷新控件就不会起冲突了;
android listView中显示不同的布局,和聊天布局一个原理,最精简的demo,有注释 一看就懂。
android Listview分批加载+自动加载改进版(附源码下载) 博客地址:
Android Listview Item上下拖动位置
关于listview item重用导致图片重复加载 图片重新请求
listview加载多种布局文件,代码中用了三个简单布局,其他数量可自行添加
Android ListView数据加载
android 布局中网格视图 ListView的简单运用 采用的是最简单的ArrayAdapter适配器
ListView加载多item布局及性能加载优化
ListView包含多种类型视图布局的情形,比如该文件中:我使用了两种不同的布局方式来展示;图片文字及文字 以交替的方式展示在屏幕上!
listview加载多个布局文件,代码分主Activity和适配器两部分,布局文件就不写了,相信大家会写
android ListView Item点击展开子项效果
Android Listview异步加载图片,图片错位解决方案
android 的listview 内部item的布局包含checkbox控件简单好用!
Android 使用ListView展示不同的item类型
android Listview分批加载+自动加载 非常不错的demo
Android ListView 实现分批加载