`
kerlubasola
  • 浏览: 709574 次
文章分类
社区版块
存档分类
最新评论

android listview item 加载不同的布局样式文件

 
阅读更多

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加载不同布局"是Android开发中常用的一种技巧,它允许我们在一个ListView中展示不同样式和信息的条目,提高了界面的多样性与用户体验。通过自定义Adapter和适当地管理布局,我们可以灵活地处理...

    android ListView 网格布局

    1. 创建布局文件:首先,在res/layout目录下创建一个新的XML布局文件,例如grid_item.xml,用于定义每个网格项的视图。在这个文件中,你可以使用LinearLayout、RelativeLayout或ConstraintLayout等容器,结合...

    基于Android ListView之加载使用技巧

    在布局文件中,我们可以使用ViewStub来动态加载这些状态的视图。ViewStub是一个轻量级的View,初始时不占用任何空间,只有当被设置为可见时才会加载其布局并占据空间。以下是如何使用ViewStub的例子: ```xml ...

    Android ListView 不同类型item展示

    总结,Android中的ListView通过自定义Adapter和多种视图类型,能够灵活地展示不同样式的item,提高了用户体验。理解并熟练运用这项技术对于Android开发者来说非常重要。在实际开发中,我们应结合具体需求,合理设计...

    listview加载不同的布局

    首先,我们需要创建不同的布局文件,比如`item_text_only.xml`和`item_image_and_text.xml`,分别对应只包含文字的布局和包含图片和文字的布局。这些布局文件通常位于项目的`res/layout`目录下。 接着,我们要创建...

    Android ListView边框圆角美化

    1. **自定义ListView项布局**:创建一个新的XML布局文件,如`list_item.xml`,在这个文件中定义你需要的元素,并添加圆角属性。例如,如果使用一个LinearLayout作为父容器,可以使用`android:background`属性设置一...

    listView item不同布局demo

    总结来说,"listView item不同布局demo"是一个展示如何在ListView中实现多类型item布局的实例,通过自定义Adapter和复写关键方法,我们可以灵活地控制ListView每一项的显示样式,从而满足各种复杂的需求。...

    在Android中ListView多种Item布局的实现

    我们可以创建两个不同的View布局文件,如`message_sent.xml`和`message_received.xml`,分别对应这两种类型。 在`getView()`方法中,我们会根据数据来决定使用哪种布局。通常,数据中会包含消息的方向信息,比如一...

    android listview 自定义样式实例

    - **自定义ListView项布局**:首先,你需要创建一个XML布局文件来定义ListView每一项的显示样式。这可以通过在`res/layout`目录下创建一个新的XML文件来完成,例如`list_item.xml`。在这个文件中,你可以自由添加...

    ListView Item多布局的实现

    首先,我们需要创建两种或多种不同的布局文件,每个文件代表一种布局样式。例如,我们可以为普通列表项和头部列表项创建两个XML布局文件,分别命名为`list_item_normal.xml`和`list_item_header.xml`。在这些布局...

    Android中ListView的每个Item以资源文件XML形式显示数据进行布局

    XML布局文件是Android UI设计的基础,它定义了界面元素的结构和样式。在ListView的上下文中,每个Item通常包含多个View组件(如TextView、ImageView等),以展示不同的数据字段。例如,一个XML布局可能包含两个...

    解决Android ListView滚动布局错位

    然而,当ListView包含多种不同类型的布局时,可能会遇到滚动过程中布局错位的问题。这个问题通常发生在使用`convertView`进行视图复用时,如果不正确处理,会导致视图显示不一致。本篇文章将深入探讨如何解决这一...

    Android ListView简单示例

    在res/layout目录下,我们需要创建两个XML布局文件:一个用于ListView的整体布局(如activity_main.xml),另一个用于定义ListView中每一项的布局(如list_item.xml)。list_item.xml文件将包含一个TextView或更...

    ListView实现不同的item

    例如,我们可以定义多个布局文件(如`item_layout1.xml`, `item_layout2.xml`),然后根据数据项的类型决定加载哪个布局。 ```java int layoutResId; switch (dataList.get(position).getType()) { case TYPE1: ...

    android listview仿iphone特效

    在这个方法里,你可以设计每个列表项的布局,比如使用不同的图片、文字颜色和大小等,以模仿iPhone的样式。 2. **设置动态高度**:iPhone的列表项高度可能随内容变化,因此你需要计算每个条目的实际高度,并在...

    listview item 选择问题

    - 如果需要在ListView重新加载或应用重启后保留item的选择状态,可以将当前选中的item位置保存在SharedPreferences或数据库中。然后在Adapter初始化时读取这些位置,设置相应的item为选中状态。 8. **ListView与...

    androidの多种风格listview不同案例积累使用

    2. **布局管理**:ListView的样式可以通过设置Item的布局文件来定制。例如,可以包含图像、文本、按钮等元素,通过`inflate()`方法将XML布局文件转换为View对象。 3. **数据绑定**:在`getView()`方法中,将数据与...

    android listView 改变选中行的 字体颜色和 图片

    - 在XML资源文件中定义Selector,设置不同状态下的颜色和图片,然后将其设为ListView项的背景。 8. **监听ListView的事件**: - 可以通过实现`OnItemClickListener`接口来监听ListView的点击事件,这样可以在用户...

    Android ListView 选中效果 自定义

    接下来,我们需要在ListView的Item布局文件中引用这个状态选择器: ```xml &lt;!-- item_list.xml --&gt; xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android...

    Android ListView扩展(图片+文字)

    2. 布局设计:为ListView项创建XML布局文件,定义图片和文字的显示样式。例如,可以创建一个`list_item.xml`,包含一个ImageView和一个TextView。使用LinearLayout或RelativeLayout等布局管理器,合理设置元素的属性...

Global site tag (gtag.js) - Google Analytics