解决方案 »
- Android 布局全用代码写(来者有分)
- android webview页面 中cookie的问题,在线等
- 请教:如何监听字形风格改变
- MTK6573智能机平台系统文件夹文件详解1
- android JNI 编译时出错了, 这是怎么回事,请大家帮我看看,人在线.速度结贴!
- 如何修改Android源码,吧google搜索条换成其他的widget,例如换自带的Clock
- Android4.2 scrollview 手势bug问题解决
- 大家都用的哪些天气预报API接口
- 求大家对LocalSocket的理解
- Android Studio gradle问题
- SurfaceView问题
- 如何获取ListView的Item的高度
mDataArrays.add(0,entityck);
irefresh++;
System.out.println("位置 :"+lv1.getFirstVisiblePosition());
mAdapter.notifyDataSetChanged();
lv1.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
lv1.setSelection(4);
}});
* 消息ListView的Adapter
*
* @author way
*/
public class ChatMsgViewAdapter extends BaseAdapter { private List<ChatMsgEntity> coll;// 消息对象数组
private LayoutInflater mInflater; public ChatMsgViewAdapter(Context context, List<ChatMsgEntity> coll) {
this.coll = coll;
mInflater = LayoutInflater.from(context);
} public int getCount() {
return coll.size();
} public Object getItem(int position) {
return coll.get(position);
} public long getItemId(int position) {
return position;
} //这种实现方法效率不高,实际应该用if (convertView == null) {...convertView.setTag(viewHolder);}
//else {convertView.getTag();}这种方法,但这种方法我暂时实现不了聊天对话框的左右切换。
public View getView(int position, View convertView, ViewGroup parent) { System.out.println("hec:getView " + position + " " + convertView);
ChatMsgEntity entity = coll.get(position);
boolean isComMsg = entity.getMsgType(); if (true==isComMsg)
System.out.print("isComMsg is true --> 左 ");
else
System.out.print("isComMsg is false --> 右 ");
ViewHolder viewHolder = null;
viewHolder = new ViewHolder();
if (isComMsg)
convertView = mInflater.inflate(R.layout.chatting_item_msg_text_left, null);
else
convertView = mInflater.inflate(R.layout.chatting_item_msg_text_right, null);
viewHolder.tvUserName = (TextView) convertView.findViewById(R.id.tv_username);
viewHolder.tvUserName.setText(entity.getName());
viewHolder.tvContent = (TextView) convertView
.findViewById(R.id.tv_chatcontent);
viewHolder.tvSendTime = (TextView) convertView
.findViewById(R.id.tv_sendtime);
viewHolder.tvContent.setText(entity.getMessage());
viewHolder.tvSendTime.setText(entity.getDate());
//如果传入的时间为空,则把时间控件隐藏
if (null==entity.getDate())
viewHolder.tvSendTime.setVisibility(View.GONE);
System.out.println("hec:text " + entity.getMessage());
return convertView;
} static class ViewHolder {
public TextView tvSendTime;
public TextView tvUserName;
public TextView tvContent;
public ImageView icon;
public boolean isComMsg = true;
}}
2 listView smoothScrollToPosition 这个方法 应该能比较流畅点的显示你要的效果。
1、你说的是使用adapter时应该用if (convertView == null) {...convertView.setTag(viewHolder);} //else {convertView.getTag();}这种方法对吗?改为这种方式之后也不行。
2、方法2还没有使用,但实际不是刷新是否流畅的问题,我这个是类QQ聊天的界面,手指从上往下拉时需要从服务器把之前聊天记录加载进来,加载进来之后使用mAdapter.notifyDataSetChanged();更新listview,就在更新时会先跳到listview的底部,然后再回到上面了(我使用lv1.setSelection(4);方法加到顶部第5条记录)。如果不更新,数据就会错乱。。
有什么办法吗?谢谢。
这个怎么办?
而你说的这个方法smoothScrollToPosition,我看是滚动的一个功能,不管这个滚动是否流畅,前一步会先跳到底部就不对了。。
谢谢。。
irefresh++;
System.out.println("位置 :"+lv1.getFirstVisiblePosition());
mAdapter.notifyDataSetChanged();你的代码中 是加一条就notify下data?getViewType 是针对有复杂Item的listView的适配扩展。基本上可以满足聊天列表的需求。