解决方案 »

  1.   


    调用了,问题的关键是出软键盘之间怎么都不会改变,一触摸edittext弹出软键盘之后listview才会多出一行
      

  2.   

    仔细看看你是不是写错方法了,写成notifyDataSetInvalidated了
      

  3.   

    仔细看看你是不是写错方法了,写成notifyDataSetInvalidated了没错,而且调用这个也试过
      

  4.   

    public class ChatMsgViewAdapter extends BaseAdapter {
    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;
        }}
      

  5.   

    adapter.notifyDataSetChanged(); 在哪里调用的,看看调用的地方是否正确
      

  6.   


    子线程更新数据,然后发送消息给handler,在handler调用
      

  7.   

    handler在哪定义的?代码贴出来瞧瞧
      

  8.   

    就在本activity下面Handler handler = new 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都工作正常
      

  9.   

    是不是data数据源本身就没有发生改变
      

  10.   

    adapter类中加个方法
    public void SetData(List<Chat> coll){this.coll=coll;}notifyDataSetChanged 之前先调用这个方法如何呢?
      

  11.   

    试试listView setAdapter(new .Adapter);
      

  12.   

    notifyDataSetChanged刷新是针对全局变量的list数据,只要在调用notifyDataSetChanged前保证list数据已添加进去了
      

  13.   


    在后台输出了确定数据已添加你后台输出的数据是适配器中list的还是UI中list的?
      

  14.   

    只能说这种莫名其妙的问题,需要加些调试代码,然后方便debug
    1、在你调用adapter.notifyDataSetChanged是否确定数据源已经更新了?
    你自己认为是更新了,那么你就在调用这句代码之前(最好是前一句),看看是否更新(打印或者debug看数据)
    2、是否是更新了数据,但是在getView的时候,是否有逻辑代码,该条数据并没有加载对应的View出来
    3、还有一种情况最J8,就是很多地方你try-catch了,所以没有报错,但是整个代码却没有执行完,就跳出了,这种最好是从拿到数据源到刷新UI,一句一句的跟小弟拙见,希望对你有帮助
      

  15.   

    在return ConvertView前加adapter.notifyDataSetChanged();
      

  16.   

    listview.invalidate();是不是要调用这个东东呢,我也不太懂哈
      

  17.   

    解决了:我也遇到这个问题,后来发现是在其他线程中获取到数据,然后调用notifyDataSetChanged后没有生效,后来通过Handler把数据发回UI主线程,最后再调用notifyDataSetChanged才生效。
    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);
    }
      

  18.   

    估计是你的adapter问题,可以看下我的这个回复:
    http://bbs.csdn.net/topics/390950466