【原创】android 实现气泡式listview

iphone中短信聊天都是那种气泡式的,当然,android短信也是,
那么我们如何实现这种效果呢?

我下面就简单的实现了一个demo,

其实就是一个listview,然后对adapter中getview的时候,根据自己的设定来获取不同的layout。
具体看代码:


public class MainActivity extends Activity {
private ListView talkView;
private ArrayList<DetailEntity> list = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

talkView = (ListView)findViewById(R.id.list);

list = new ArrayList<DetailEntity>();
DetailEntity d1 = new DetailEntity("Me","2012-04-26","Hello!",R.layout.list_say_me_item);
list.add(d1);
DetailEntity d2 = new DetailEntity("You","2012-04-26","Hi!",R.layout.list_say_he_item);
list.add(d2);
DetailEntity d3 = new DetailEntity("Me","2012-04-26","Waht is your name?",R.layout.list_say_he_item);
list.add(d3);
DetailEntity d4 = new DetailEntity("You","2012-04-26","****!",R.layout.list_say_me_item);
list.add(d4);

talkView.setAdapter(new DetailAdapter(MainActivity.this, list));
}
}


然后是adapter了

public class DetailAdapter implements ListAdapter {
private ArrayList<DetailEntity> coll;
private Context ctx;

public DetailAdapter(Context context, ArrayList<DetailEntity> coll) {
ctx = context;
this.coll = coll;
}

public boolean areAllItemsEnabled() {
return false;
}

public boolean isEnabled(int arg0) {
return false;
}

public int getCount() {
return coll.size();
}

public Object getItem(int position) {
return coll.get(position);
}

public long getItemId(int position) {
return position;
}

public int getItemViewType(int position) {
return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
[color=red]DetailEntity entity = coll.get(position);
int itemLayout = entity.getLayoutID();[/color]

LinearLayout layout = new LinearLayout(ctx);
LayoutInflater vi = (LayoutInflater) ctx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi.inflate(itemLayout, layout, true);

TextView tvName = (TextView) layout
.findViewById(R.id.messagedetail_row_name);
tvName.setText(entity.getName());

TextView tvDate = (TextView) layout
.findViewById(R.id.messagedetail_row_date);
tvDate.setText(entity.getDate());

TextView tvText = (TextView) layout
.findViewById(R.id.messagedetail_row_text);
tvText.setText(entity.getText());
return layout;
}

public int getViewTypeCount() {
return coll.size();
}

public boolean hasStableIds() {
return false;
}

public boolean isEmpty() {
return false;
}

public void registerDataSetObserver(DataSetObserver observer) {
}

public void unregisterDataSetObserver(DataSetObserver observer) {
}

}


注意红色部分,获取到相应的layout。
就实现了气泡式的效果了。
效果图:
[img]http://dl.iteye.com/upload/attachment/0069/5352/962c2153-80ad-38c2-aecc-0f455c1c6fbd.png[/img]
具体代码见附件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值