android ListView Adapter不显示

问题描述

android ListView Adapter不显示

//activity
package wk.bluetooth;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.inputmethod.InputMethodManager;
import android.widget.*;
import android.widget.AdapterView.OnItemClickListener;
import android.view.View.OnClickListener;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import wk.bluetooth.StartServer.ChatListItem;

public class StartClient extends Activity implements OnItemClickListener ,OnClickListener{

private ListView mListView;
ChatAdapter mAdapter;
private ArrayList<ChatListItem> list;

private EditText sendMessage;
private Button sendButton;
private TextView title;
private ImageButton back;

private String joinChatRoomName;
private String address;
private String nowTime;

private BluetoothSocket socket;
private BluetoothDevice device = null;
private clientThread startClient = null;
private readThread mreadThread = null;
private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

Context mContext;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    setContentView(R.layout.chat);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.titlebar);
    Bundle bundle = this.getIntent().getExtras();
    joinChatRoomName = bundle.getString("joinChatRoomName");
    address = bundle.getString("address");

    mContext = this;
    init();
}
private  void init(){
    device = mBluetoothAdapter.getRemoteDevice(address);

    list = new ArrayList<ChatListItem>();
    mAdapter = new ChatAdapter(mContext, list);
    mListView = (ListView) findViewById(R.id.chat_list);
    mListView.setAdapter(mAdapter);
    //mListView.setOnItemClickListener(this);
    mListView.setFastScrollEnabled(true);

    title = (TextView) findViewById(R.id.title);
    title.setText(joinChatRoomName);

    back = (ImageButton) findViewById(R.id.back);
    back.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            if(mreadThread!=null){
                mreadThread.interrupt();
            }
            if(startClient != null){
                startClient.interrupt();
            }
            list.clear();
            StartClient.this.finish();
        }
    });

    sendMessage = (EditText)findViewById(R.id.MessageText);
    sendButton = (Button)findViewById(R.id.btn_msg_send);
    sendButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            String msg= sendMessage.getText().toString();
            if(msg.length()>0){
                SendMessageHandle(msg);
                sendMessage.setText("");
                sendMessage.clearFocus();
                InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(sendMessage.getWindowToken(), 0);

            }else{
                Toast.makeText(mContext, "消息发送失败", Toast.LENGTH_SHORT).show();
                sendMessage.setText("");
                sendMessage.clearFocus();
            }

        }
    });
    if(Bluetooth.joinChatRoom.get(address)) {
        Log.d("StartClient","join again");
        mreadThread = new readThread();
        mreadThread.start();

    }else{
        Log.d("StartClient","first time join");
        startClient = new clientThread();
        startClient.start();
    }

}

private class clientThread extends Thread {
    @Override
    public void run() {
        try {

            Message msg2 = new Message();
            msg2.obj = "正在加入"+device.getName()+"的聊天室";
            msg2.what = 2;
            LinkDetectedHandler.sendMessage(msg2);
            //创建一个Socket连接:只需要服务器在注册时的UUID号
            socket = Bluetooth.joinChatRoomSocket.get(address);
            //连接
            socket.connect();
            Bluetooth.joinChatRoomSocket.put(address,socket);
            Bluetooth.joinChatRoom.put(address,true);

           // new IsNotConnected().start();

            //启动接受数据
            mreadThread = new readThread();
            mreadThread.start();
        }
        catch (IOException e)
        {
            Bluetooth.joinChatRoom.put(address,false);
            Message msg = new Message();
            msg.obj = "加入聊天室失败,请断开重试";
            msg.what = 2;
            LinkDetectedHandler.sendMessage(msg);
        }

    }
}

//读取数据
private class readThread extends Thread {
@Override
public void run() {
Log.d("StartClient","read buffer");
byte[] buffer = new byte[1024];
int bytes;
InputStream mmInStream = null;

        try {
            mmInStream = Bluetooth.joinChatRoomSocket.get(address).getInputStream();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        while (true) {
            try {
                // Read from the InputStream
                if ((bytes = mmInStream.read(buffer)) > 0) {
                    byte[] buf_data = new byte[bytes];
                    for (int i = 0; i < bytes; i++) {
                        buf_data[i] = buffer[i];
                    }

                    String s = new String(buf_data);
                    Log.d("ReceiveMessage",s+"-------");
                    if(s.equals("MARLBORO")){
                        continue;
                    }

                    Message message = new Message();
                    message.obj = s;
                    message.what = 1;
                    LinkDetectedHandler.sendMessage(message);
                }
            } catch (IOException e) {
                try {
                    mmInStream.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                break;
            }

        }
    }
}

private Handler LinkDetectedHandler = new Handler() {
    //what = 0发送的消息
    //what = 1接受的消息
    //what = 2公共消息
    @Override
    public void handleMessage(Message msg) {
        Log.d("ReceiveMessage", msg.obj + "   " + msg.what);
        SimpleDateFormat formatter = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
        nowTime = formatter.format(new Date(System.currentTimeMillis()));

        list.add(new ChatListItem((String) msg.obj, nowTime, msg.what));

        Log.d("ReceiveMessage","list size"+list.size());

        Log.d("ReceiveMessage","adddddddddddd");
        mAdapter.notifyDataSetChanged();
        mListView.setSelection(list.size() - 1);

    }

};

private void SendMessageHandle(String msg){
    Log.d("StartClient","send message"+msg);
    try {
        OutputStream outputStream = Bluetooth.joinChatRoomSocket.get(address).getOutputStream();
        outputStream.write(msg.getBytes());
    } catch (Exception e) {}
    Message m = new Message();
    m.obj = msg;
    m.what = 0;
    LinkDetectedHandler.sendMessage(m);
}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    // TODO Auto-generated method stub
}
@Override
public void onClick(View arg0) {
    // TODO Auto-generated method stub
}

public class joinChatListItem {
    String message;
    Integer flag;

    public joinChatListItem(String msg, Integer f) {
        message = msg;
        flag = f;
    }
}

}

解决方案

//adapter
package wk.bluetooth;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import wk.bluetooth.StartServer.ChatListItem;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

/**

  • Created by wk on 2015/5/4.
    */
    public class ChatAdapter extends BaseAdapter {
    private ArrayList list;
    private LayoutInflater mInflater;

    public ChatAdapter(Context context, ArrayList l) {
    list = l;
    mInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
    return list.size();
    }

    @Override
    public Object getItem(int position) {
    return list.get(position);
    }

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder = null;
    int[] textView ={R.id.send_text,R.id.receive_text,R.id.receive_text};
    int[] imageView = {R.id.send_head_image,R.id.receive_head_image, R.id.receive_head_image};
    int[] layout = {R.layout.send_message,R.layout.receive_message, R.layout.receive_message};
    Log.d("ChatAdapter","hhhhhhhhhhhhhhhhhhhh");
    ChatListItem item=list.get(position);
    Log.d("ChatAdapter","item.flag "+item.flag+"item.mes "+item.message);
    // if(convertView == null){
    Log.d("ChatAdapter","--"+item.message+" -- "+ item.flag);
    convertView = mInflater.inflate(layout[item.flag], null);
    viewHolder=new ViewHolder(
    // convertView.findViewById(R.id.list_child),
    (TextView) convertView.findViewById(textView[item.flag])
    , (TextView) convertView.findViewById(R.id.message_time)
    ,(ImageView) convertView.findViewById(imageView[item.flag])
    );
    convertView.setTag(viewHolder);
    //}

    //else{
      //  Log.d("ChatAdapter","nullllllllllll");
       // viewHolder = (ViewHolder)convertView.getTag();
    //}
    if(item.flag==2){
        Log.d("ChatAdapter",item.message+"--"+item.flag);
        viewHolder.time.setText(item.message);
        viewHolder.msg.setVisibility(View.GONE);
        viewHolder.img.setVisibility(View.GONE);
    }else {
        viewHolder.msg.setVisibility(View.VISIBLE);
        viewHolder.img.setVisibility(View.VISIBLE);
        viewHolder.time.setText(item.time);
        viewHolder.msg.setText(item.message);
    }
    return convertView;
    

    }

    class ViewHolder {
    protected TextView msg;
    protected TextView time;
    protected ImageView img;

    public ViewHolder(TextView message, TextView t, ImageView im){
        this.msg = message;
        this.time = t;
        this.img = im;
    
    }
    

    }
    }

我能收到socket发送的消息,但是我多次调用这个activity后 list没有add数据adapter也没有调用

解决方案二:

只要没有点返回之类的按钮,list应该是不断增大了。先跟踪看看list没有增加的原因吧

时间: 2024-08-28 19:32:37

android ListView Adapter不显示的相关文章

android listview adapter

问题描述 android listview adapter lv.setAdapter(new ArrayAdapter(thisandroid.R.layout.simple_list_item_1 strs));其中lv是一个listview的对象,已获取lv的id,strs是已定义的字符串数组,现在只要添加这句,程序不报错,但是运行错误,删除这句就能运行了 解决方案 把错误发上来把错误发上来 解决方案二: 12-28 21:25:58.529 938-938/com.example.adm

关于 Android Listview不显示数据的问题

问题描述 关于 Android Listview不显示数据的问题 ListView 正常,数据也正常,但是就是不显示数据. List View 中包含Item布局(TextView),ViewPager中包含ListView,MainActivity中包含Viewpager. ==== TextView >ListView >ViewPager >MainActivity ==== ListView .setAdapter(Context,ArrayList);debug调试发现 Con

android listview-Android Listview adapter数据更新

问题描述 Android Listview adapter数据更新 listview绑定适配器后,数据更新不是需要调用notifyDataSetChanged刷新数据吗,为什么我现在不用掉也能刷新,平台是4.2和4.4,低的平台没测.代码如下 adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); listview = (ListView)findViewById(R.id.listview)

getview方法不执行- android listview自定义adapter,getview方法不显示

问题描述 android listview自定义adapter,getview方法不显示 adapter的getCount值不为0,但是不执行getview方法,在ErrorLog中打印出来的log在下面贴出来了,希望路过的大牛们帮忙看看 解决方案 问题找到了,是我的listView的布局控件不正确,已经改好了 解决方案二: android listView 重写Adapter方法getView的性能优化问题 解决方案三: 空指针异常,找找在哪个位置. 解决方案四: log和问的错没什么关系 解

Android ListView滑动过程中图片显示重复错乱闪烁的原因及解决方法

主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及ListView的缓存机制. 1.原因分析 ListView item缓存机制:为了使得性能更优,ListView会缓存行item(某行对应的View).ListView通过adapter的getView函数获得每行的item.滑动过程中, a. 如果某行item已经滑出屏幕,若该item不在缓存内,则put进缓存,否则更新缓存: b. 获取滑入屏幕的行item之前会先判断缓存中是否有可用的ite

Android ListView滑动过程中图片显示重复错位闪烁问题解决

主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及ListView的缓存机制.1.原因分析ListView item缓存机制:为了使得性能更优,ListView会缓存行item(某行对应的View).ListView通过adapter的getView函数获得每行的item.滑动过程中, a. 如果某行item已经滑出屏幕,若该item不在缓存内,则put进缓存,否则更新缓存: b. 获取滑入屏幕的行item之前会先判断缓存中是否有可用的item,

android开发-关于android中listview里面textview显示混乱

问题描述 关于android中listview里面textview显示混乱 哪位大神能帮我解决下面代码中的listview里面textview的显示混乱问题 纠结好久了 谢谢 复制可以直接执行 源文件: package com.example.listviewtest; import java.util.ArrayList; import android.os.Bundle; import android.app.Activity; import android.view.LayoutInfla

Android listview与adapter详解及实例代码_Android

一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView就是实现这个功能的.第二点也不难做到,在后面的学习中读者会发现,这非常简单. 一个ListView的创建需要3个元素. (1)ListView中的每一列的View. (2)填入View的数据或者图片等. (3)连接数据与ListView的适配器. 也就是说,要使用ListView,首先要了解什么是适配器.适配器是一个连接数据和AdapterView(ListView就

Android应用中使用ListView来分页显示刷新的内容_Android

点击按钮刷新1.效果如下: 实例如下:  上图的添加数据按钮可以换成一个进度条  因为没有数据所以我加了一个按钮添加到数据库用于测试:一般在服务器拉去数据需要一定的时间,所以可以弄个进度条来提示用户: 点击加载按钮的时候,向数据库读取一次数据,把读取的数据追加到原来的数据集中:然后显示出来 package com.exampleandroid.xiong.listviewpages; public class News { private String title; private int id