解决方案 »
- 如何实现gallery的图片的拖动
- 有没有一种方法 只用Intent 传值 但是不跳转别的Activity的 方法
- android chrome lite浏览器 click事件
- 线性布局问题,跪求高手指点
- 请教!Android网络访问支持“自定义异常恢复机制”吗?
- 那修改了设置里的日期的格式,但是桌面的时间格式没变,
- 求教,能不能在监听器类中实现弹出对话框呀?(在线等)
- 新手,求一份完整的socket代码
- android怎么知道自己的应用是否被允许开机启动了
- Android studio 怎样才能编译运行顺畅
- 怎么解析webservice返回的SoapObject数据
- 点击ListView的item时进行跳转(携带数据)
调用了,问题的关键是出软键盘之间怎么都不会改变,一触摸edittext弹出软键盘之后listview才会多出一行
public static interface IMsgViewType{
int IMVT_COM_MSG = 0;
int IMVT_TO_MSG = 1;
}
// private static final String TAG = ChatMsgViewAdapter.class.getSimpleName(); private List<Chat> coll; private Context ctx;
private LayoutInflater mInflater; public ChatMsgViewAdapter(Context context, List<Chat> coll) {
ctx = context;
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;
} public int getItemViewType(int position) {
Chat entity = coll.get(position);
if (entity.getMsgType()){
return IMsgViewType.IMVT_COM_MSG;
}else{
return IMsgViewType.IMVT_TO_MSG;
}
} public int getViewTypeCount() {
return 2;
}
public View getView(int position, View convertView, ViewGroup parent) {
Chat entity = coll.get(position);
boolean isComMsg = entity.getMsgType();
ViewHolder viewHolder = null;
if (convertView == null){
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 = new ViewHolder();
viewHolder.tvSendTime = (TextView) convertView.findViewById(R.id.tv_sendtime);
viewHolder.tvUserName = (TextView) convertView.findViewById(R.id.tv_username);
viewHolder.tvContent = (TextView) convertView.findViewById(R.id.tv_chatcontent);
viewHolder.isComMsg = isComMsg;
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.tvSendTime.setText(entity.getDate());
viewHolder.tvUserName.setText(entity.getName());
viewHolder.tvContent.setText(entity.getContent());
return convertView;
}
static class ViewHolder {
public TextView tvSendTime;
public TextView tvUserName;
public TextView tvContent;
public boolean isComMsg = true;
}}
子线程更新数据,然后发送消息给handler,在handler调用
@Override
public void handleMessage(Message msg) {
if(msg.arg1 == 1) {
dialog.dismiss();
mAdapter.notifyDataSetChanged();
mListView.setSelection(10);
}else if(msg.arg1 == 2) {
dialog.dismiss();
mAdapter.notifyDataSetChanged();
mListView.setSelection(msg.arg2);
mListView.setOnScrollListener(null);
Toast.makeText(getApplicationContext(), "加载完所有", Toast.LENGTH_SHORT).show();
}else if (msg.arg1 == 3){
dialog.dismiss();
mListView.setOnScrollListener(null);
Toast.makeText(getApplicationContext(), "加载完所有", Toast.LENGTH_SHORT).show();
}else if (msg.arg1 == 4){
mAdapter.notifyDataSetChanged();
mListView.setSelection(mListView.getCount() - 1);
}else if (msg.arg1 == -1){
}else {
dialog.dismiss();
Toast.makeText(getApplicationContext(), "网络错误", Toast.LENGTH_SHORT).show();
}
}
};
我这个问题只是出现在msg==4的时候,其它notify都工作正常
public void SetData(List<Chat> coll){this.coll=coll;}notifyDataSetChanged 之前先调用这个方法如何呢?
在后台输出了确定数据已添加你后台输出的数据是适配器中list的还是UI中list的?
1、在你调用adapter.notifyDataSetChanged是否确定数据源已经更新了?
你自己认为是更新了,那么你就在调用这句代码之前(最好是前一句),看看是否更新(打印或者debug看数据)
2、是否是更新了数据,但是在getView的时候,是否有逻辑代码,该条数据并没有加载对应的View出来
3、还有一种情况最J8,就是很多地方你try-catch了,所以没有报错,但是整个代码却没有执行完,就跳出了,这种最好是从拿到数据源到刷新UI,一句一句的跟小弟拙见,希望对你有帮助
public Handler handler = new Handler() {
@Override
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 0: {
String result = msg.getData().getString("msg");
IndividualApiVO individual = new IndividualApiVO();
individual.setSignature(result);
nearbyIndividuals.add(individual);
nearByUserAdapter.notifyDataSetChanged();
}
break;
default:
break;
}
}
};
@Override
public void onMessageArrive(Message message) {
if (message == null) {
return;
}
MessageApiVO notice = noticeManager.messageToNoticeObject(message); Bundle bd = new Bundle();
bd.putString("msg", notice.getContent()); android.os.Message msg = new android.os.Message();
msg.what = 0;
msg.setData(bd);
handler.sendMessage(msg);
}
http://bbs.csdn.net/topics/390950466