解决方案 »

  1.   

    第一次发帖,希望好心人解答,每次收到Socket数据以后必须点击输入框,当弹出软键盘后listView才会更新出来.
      

  2.   

    listview.setAdapter(lAdt);怎么跑到子线程里去设置了?
      

  3.   

    Quote: 引用 2 楼 lionfresh 的回复:

    listview.setAdapter(lAdt);怎么跑到子线程里去设置了?[/quote
    ]那一句不要也是那个效果  调试两天无果.各种方法试试.
      

  4.   

    不知道你UDPAdapter是怎么写的,至少从你贴出来的代码上我看不到你对adapter数据的更改
      

  5.   

    // Handler处理机制
    class ListHandler extends Handler {
    private Adapter adt;public ListHandler(Adapter adt) {
    this.adt = adt;
    }@Override
    public void handleMessage(Message msg) {
    super.handleMessage(msg);
    //lAdt = new UDPAdapter(mContext,GlobalCoutent.listdata);
    //listview.setAdapter(lAdt);
    lAdt.notifyDataSetChanged(); //发送消息通知ListView更新
    //listview.setAdapter(lAdt); // 重新设置ListView的数据适配器
    }
    }
    这个不是对ListVIew的更改么?
      

  6.   

    package com.example.adapter;import java.util.List;import com.example.ixui.R;import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.CheckBox;
    import android.widget.TextView;public class UDPAdapter extends BaseAdapter { private List<Driver> list;
    private Context mContext;
    private Driver driver;
    public UDPAdapter(Context context,List<Driver> list2) {
    // TODO Auto-generated constructor stub
    this.mContext=context;
    this.list=list2;
    }

    @Override
    public int getCount() {
    // TODO Auto-generated method stub
    return list == null ? 0 : list.size();
    } @Override
    public Object getItem(int location) {
    // TODO Auto-generated method stub
    return list.get(location);
    } @Override
    public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
    } @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder=null;
    if (convertView == null) {
    holder=new ViewHolder();
    convertView = (ViewGroup) LayoutInflater.from(mContext).inflate(
    R.layout.seathlist_item, null);
    holder.tvmax=(TextView) convertView.findViewById(R.id.textmax);
    holder.tvid=(TextView) convertView.findViewById(R.id.textid);
    holder.tvtype=(TextView) convertView.findViewById(R.id.texttype);

    holder.cbCheck=(CheckBox) convertView.findViewById(R.id.cbCheckBox);
    convertView.setTag(holder);
    } else {
    holder = (ViewHolder) convertView.getTag();
    }

    driver=list.get(position);
    holder.tvtype.setText(driver.getType());
    holder.tvmax.setText(driver.getData());
    holder.tvid.setText(driver.getId());
    return convertView; }

    public static class ViewHolder {
    public TextView tvmax = null;
    public TextView tvid = null;
    public TextView tvtype = null;
    public CheckBox cbCheck = null;
    }
    }
      

  7.   

    package com.example.ixui;import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;import com.example.adapter.Device;
    import com.example.adapter.Driver;
    import com.example.adapter.GlobalCoutent;
    import com.example.adapter.UDPAdapter;
    import com.example.ixui.ListUDPActivity.ListHandler;import android.app.Activity;
    import android.content.Context;
    import android.content.pm.ActivityInfo;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.WindowManager;
    import android.widget.Adapter;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.AdapterView.OnItemClickListener;public class UDPSeachActivity extends Activity {
    //68000368576520EEEEEE31010211EB16
    private byte[] data;
    private DatagramSocket socket;
    private Context mContext;
    private UDPAdapter lAdt;
    private ListView listview;
    private ListHandler listHandler;
    private int t=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.update_ssid_password);
    this.mContext = this;
    // 强制横屏
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    // 软键盘弹出问题
    getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
    try {
    if (socket == null) {
    socket = new DatagramSocket(GlobalCoutent.PORT);
    GlobalCoutent.socket = socket;
    }
    } catch (SocketException e) {
    e.printStackTrace();
    }
    new Thread(new ReceiveThread(GlobalCoutent.socket)).start();
    initListView();
    //创建一个list handler
    listHandler = new ListHandler(lAdt);
    // 向list handler发送消息请求更新devSearchList
    Message msg = new Message();
    listHandler.sendMessage(msg);
    } // Handler处理机制
    class ListHandler extends Handler {
    private Adapter adt; public ListHandler(Adapter adt) {
    this.adt = adt;
    }
    @Override
    public void handleMessage(Message msg) {
    super.handleMessage(msg);
    //lAdt.notifyDataSetChanged(); //发送消息通知ListView更新
    listview.setAdapter(lAdt); // 重新设置ListView的数据适配器
    }
    }
    private class OnItemClickListenerDevSearchList implements OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> adapter, View view,
    int position, long arg3) {
    listview.getItemAtPosition(position);
    }
    }
    private void initListView() {
    // TODO Auto-generated method stub
    listview = (ListView) findViewById(R.id.listviewudp);
    data = new byte[GlobalCoutent.SEARCH_SIGN_SIZE];
    lAdt = new UDPAdapter(mContext,GlobalCoutent.listdata);
    listview.setOnItemClickListener(new OnItemClickListenerDevSearchList());
    listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    } /**
     * 接收udp信号的线程
     * @author Administrator
     */
    class ReceiveThread extends Thread {
    private DatagramSocket socket;
    public ReceiveThread(DatagramSocket socket) {
    this.socket = socket;
    }
    @Override
    public void run() {
    try {
    DatagramPacket packet = new DatagramPacket(data, data.length);
    while (true) {
    t++;
    socket.receive(packet);
    Driver driver=new Driver();
    if (String.valueOf(packet.getData()[10]).equals("49")) {
    // 将设备类型存储起来
    if (String.valueOf(packet.getData()[11]).equals("1")) {
    driver.setType("面板");
    }
    if (String.valueOf(packet.getData()[11]).equals("2")) {
    driver.setType("网关");
    }
    driver.setId(String.valueOf(packet.getData()[12]));
    // 设备Mac地址
    driver.setData(String.valueOf(packet.getData()[4])
    + String.valueOf(packet.getData()[5])
    + String.valueOf(packet.getData()[6]));
    List <Driver> list_tmp=new ArrayList<Driver>();
    list_tmp.add(driver);
    GlobalCoutent.listdata.addAll(list_tmp);
    Message msg = new Message();
    listHandler.sendMessage(msg);
    } } } catch (SocketException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }
      

  8.   


    你要修改的是绑定到adapter的数据,你这里就是 List<Driver> list
      

  9.   


    你要修改的是绑定到adapter的数据,你这里就是 List<Driver> list
    没懂你说的什么意思 
    这个时候我的List<Driver> list已经改变
    List <Driver> list_tmp=new ArrayList<Driver>();
    list_tmp.add(driver);
    GlobalCoutent.listdata.addAll(list_tmp);
    这个时候数据已经改变
    我在调用//
    lAdt.notifyDataSetChanged(); //发送消息通知ListView更新
    listview.setAdapter(lAdt); // 重新设置ListView的数据适配器其实listView数据能接收数据的 并且也更新了listView
    只是你必须要点击我这个界面的一个输入框 它才会把更新的数据显示出来.
      

  10.   

    listview.setAdapter(lAdt);
    这句只需要你在初始化listview和adapter后执行就行了,其他地方都不需要再set,更新只需要 lAdt.notifyDataSetChanged();
      

  11.   

    lAdt.notifyDataSetChanged(); 
    因为只有这句话是凡没有任何效果的  我才加上后面一句的.
      

  12.   

    lAdt.notifyDataSetChanged(); 
    因为只有这句话是凡没有任何效果的  我才加上后面一句的.package com.example.ixui;import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;import com.example.adapter.Device;
    import com.example.adapter.Driver;
    import com.example.adapter.GlobalCoutent;
    import com.example.adapter.UDPAdapter;
    import com.example.ixui.ListUDPActivity.ListHandler;import android.app.Activity;
    import android.content.Context;
    import android.content.pm.ActivityInfo;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.WindowManager;
    import android.widget.Adapter;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.AdapterView.OnItemClickListener;public class UDPSeachActivity extends Activity {
    //68000368576520EEEEEE31010211EB16
    // SSID
    private EditText ssid;
    // SS密码
    private byte[] data;
    private DatagramSocket socket;
    // UDPAdapter adapter;
    //private Driver driver;
    private Context mContext;
    private UDPAdapter lAdt;
    private ListView listview;
    private ListHandler listHandler;
    private int t=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.update_ssid_password);
    this.mContext = this;
    // 强制横屏
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    // 软键盘弹出问题
    //getWindow().setSoftInputMode(
    // WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);// 进入activity之后,马上启动udp接收线程
    //initSocket();
    initListView();
    try {
    if (socket == null) {
    socket = new DatagramSocket(GlobalCoutent.PORT);
    GlobalCoutent.socket = socket;
    }
    } catch (SocketException e) {
    e.printStackTrace();
    }
    new Thread(new ReceiveThread(GlobalCoutent.socket)).start();
    //创建一个list handler
    listHandler = new ListHandler(lAdt);
    // 向list handler发送消息请求更新devSearchList
    Message msg = new Message();
    listHandler.sendMessage(msg);
    }// Handler处理机制
    class ListHandler extends Handler {
    private Adapter adt;public ListHandler(Adapter adt) {
    this.adt = adt;
    }@Override
    public void handleMessage(Message msg) {
    super.handleMessage(msg);
    //lAdt = new UDPAdapter(mContext,GlobalCoutent.listdata);
    lAdt.notifyDataSetChanged(); //发送消息通知ListView更新
    }
    }private class OnItemClickListenerDevSearchList implements OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> adapter, View view,
    int position, long arg3) {
    listview.getItemAtPosition(position);
    }
    }
    private void initListView() {
    // TODO Auto-generated method stub
    listview = (ListView) findViewById(R.id.listviewudp);
    //Driver driver=new Driver();
    //list.add(driver);
    data = new byte[GlobalCoutent.SEARCH_SIGN_SIZE];
    lAdt = new UDPAdapter(mContext,GlobalCoutent.listdata);
    listview.setOnItemClickListener(new OnItemClickListenerDevSearchList());
    listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    listview.setAdapter(lAdt);
    }
    /**
     * 接收udp信号的线程
     * 
     * @author Administrator
     */
    class ReceiveThread extends Thread {
    private DatagramSocket socket;public ReceiveThread(DatagramSocket socket) {
    this.socket = socket;
    }@Override
    public void run() {
    try {
    DatagramPacket packet = new DatagramPacket(data, data.length);
    while (true) {
    t++;
    socket.receive(packet);
    Driver driver=new Driver();
    if (String.valueOf(packet.getData()[10]).equals("49")) {
    // 将设备类型存储起来
    if (String.valueOf(packet.getData()[11]).equals("1")) {
    driver.setType("面板");
    }
    if (String.valueOf(packet.getData()[11]).equals("2")) {
    driver.setType("网关");
    }
    driver.setId(String.valueOf(packet.getData()[12]));
    // 设备Mac地址
    driver.setData(String.valueOf(packet.getData()[4])
    + String.valueOf(packet.getData()[5])
    + String.valueOf(packet.getData()[6]));
    List <Driver> list_tmp=new ArrayList<Driver>();
    GlobalCoutent.listdata.clear();
    list_tmp.add(driver);
    GlobalCoutent.listdata.addAll(list_tmp);
    Message msg = new Message();
    listHandler.sendMessage(msg);
    }}} catch (SocketException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }试试
      

  13.   

    lAdt.notifyDataSetChanged(); 
    因为只有这句话是凡没有任何效果的  我才加上后面一句的.package com.example.ixui;import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;import com.example.adapter.Device;
    import com.example.adapter.Driver;
    import com.example.adapter.GlobalCoutent;
    import com.example.adapter.UDPAdapter;
    import com.example.ixui.ListUDPActivity.ListHandler;import android.app.Activity;
    import android.content.Context;
    import android.content.pm.ActivityInfo;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.WindowManager;
    import android.widget.Adapter;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.AdapterView.OnItemClickListener;public class UDPSeachActivity extends Activity {
    //68000368576520EEEEEE31010211EB16
    // SSID
    private EditText ssid;
    // SS密码
    private byte[] data;
    private DatagramSocket socket;
    // UDPAdapter adapter;
    //private Driver driver;
    private Context mContext;
    private UDPAdapter lAdt;
    private ListView listview;
    private ListHandler listHandler;
    private int t=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.update_ssid_password);
    this.mContext = this;
    // 强制横屏
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    // 软键盘弹出问题
    //getWindow().setSoftInputMode(
    // WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);// 进入activity之后,马上启动udp接收线程
    //initSocket();
    initListView();
    try {
    if (socket == null) {
    socket = new DatagramSocket(GlobalCoutent.PORT);
    GlobalCoutent.socket = socket;
    }
    } catch (SocketException e) {
    e.printStackTrace();
    }
    new Thread(new ReceiveThread(GlobalCoutent.socket)).start();
    //创建一个list handler
    listHandler = new ListHandler(lAdt);
    // 向list handler发送消息请求更新devSearchList
    Message msg = new Message();
    listHandler.sendMessage(msg);
    }// Handler处理机制
    class ListHandler extends Handler {
    private Adapter adt;public ListHandler(Adapter adt) {
    this.adt = adt;
    }@Override
    public void handleMessage(Message msg) {
    super.handleMessage(msg);
    //lAdt = new UDPAdapter(mContext,GlobalCoutent.listdata);
    lAdt.notifyDataSetChanged(); //发送消息通知ListView更新
    }
    }private class OnItemClickListenerDevSearchList implements OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> adapter, View view,
    int position, long arg3) {
    listview.getItemAtPosition(position);
    }
    }
    private void initListView() {
    // TODO Auto-generated method stub
    listview = (ListView) findViewById(R.id.listviewudp);
    //Driver driver=new Driver();
    //list.add(driver);
    data = new byte[GlobalCoutent.SEARCH_SIGN_SIZE];
    lAdt = new UDPAdapter(mContext,GlobalCoutent.listdata);
    listview.setOnItemClickListener(new OnItemClickListenerDevSearchList());
    listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    listview.setAdapter(lAdt);
    }
    /**
     * 接收udp信号的线程
     * 
     * @author Administrator
     */
    class ReceiveThread extends Thread {
    private DatagramSocket socket;public ReceiveThread(DatagramSocket socket) {
    this.socket = socket;
    }@Override
    public void run() {
    try {
    DatagramPacket packet = new DatagramPacket(data, data.length);
    while (true) {
    t++;
    socket.receive(packet);
    Driver driver=new Driver();
    if (String.valueOf(packet.getData()[10]).equals("49")) {
    // 将设备类型存储起来
    if (String.valueOf(packet.getData()[11]).equals("1")) {
    driver.setType("面板");
    }
    if (String.valueOf(packet.getData()[11]).equals("2")) {
    driver.setType("网关");
    }
    driver.setId(String.valueOf(packet.getData()[12]));
    // 设备Mac地址
    driver.setData(String.valueOf(packet.getData()[4])
    + String.valueOf(packet.getData()[5])
    + String.valueOf(packet.getData()[6]));
    List <Driver> list_tmp=new ArrayList<Driver>();
    GlobalCoutent.listdata.clear();
    list_tmp.add(driver);
    GlobalCoutent.listdata.addAll(list_tmp);
    Message msg = new Message();
    listHandler.sendMessage(msg);
    }}} catch (SocketException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }试试一个效果哦,还是不行.
      

  14.   

    lAdt.notifyDataSetChanged(); 
    因为只有这句话是凡没有任何效果的  我才加上后面一句的.package com.example.ixui;import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;import com.example.adapter.Device;
    import com.example.adapter.Driver;
    import com.example.adapter.GlobalCoutent;
    import com.example.adapter.UDPAdapter;
    import com.example.ixui.ListUDPActivity.ListHandler;import android.app.Activity;
    import android.content.Context;
    import android.content.pm.ActivityInfo;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.WindowManager;
    import android.widget.Adapter;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.AdapterView.OnItemClickListener;public class UDPSeachActivity extends Activity {
    //68000368576520EEEEEE31010211EB16
    // SSID
    private EditText ssid;
    // SS密码
    private byte[] data;
    private DatagramSocket socket;
    // UDPAdapter adapter;
    //private Driver driver;
    private Context mContext;
    private UDPAdapter lAdt;
    private ListView listview;
    private ListHandler listHandler;
    private int t=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.update_ssid_password);
    this.mContext = this;
    // 强制横屏
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    // 软键盘弹出问题
    //getWindow().setSoftInputMode(
    // WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);// 进入activity之后,马上启动udp接收线程
    //initSocket();
    initListView();
    try {
    if (socket == null) {
    socket = new DatagramSocket(GlobalCoutent.PORT);
    GlobalCoutent.socket = socket;
    }
    } catch (SocketException e) {
    e.printStackTrace();
    }
    new Thread(new ReceiveThread(GlobalCoutent.socket)).start();
    //创建一个list handler
    listHandler = new ListHandler(lAdt);
    // 向list handler发送消息请求更新devSearchList
    Message msg = new Message();
    listHandler.sendMessage(msg);
    }// Handler处理机制
    class ListHandler extends Handler {
    private Adapter adt;public ListHandler(Adapter adt) {
    this.adt = adt;
    }@Override
    public void handleMessage(Message msg) {
    super.handleMessage(msg);
    //lAdt = new UDPAdapter(mContext,GlobalCoutent.listdata);
    lAdt.notifyDataSetChanged(); //发送消息通知ListView更新
    }
    }private class OnItemClickListenerDevSearchList implements OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> adapter, View view,
    int position, long arg3) {
    listview.getItemAtPosition(position);
    }
    }
    private void initListView() {
    // TODO Auto-generated method stub
    listview = (ListView) findViewById(R.id.listviewudp);
    //Driver driver=new Driver();
    //list.add(driver);
    data = new byte[GlobalCoutent.SEARCH_SIGN_SIZE];
    lAdt = new UDPAdapter(mContext,GlobalCoutent.listdata);
    listview.setOnItemClickListener(new OnItemClickListenerDevSearchList());
    listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    listview.setAdapter(lAdt);
    }
    /**
     * 接收udp信号的线程
     * 
     * @author Administrator
     */
    class ReceiveThread extends Thread {
    private DatagramSocket socket;public ReceiveThread(DatagramSocket socket) {
    this.socket = socket;
    }@Override
    public void run() {
    try {
    DatagramPacket packet = new DatagramPacket(data, data.length);
    while (true) {
    t++;
    socket.receive(packet);
    Driver driver=new Driver();
    if (String.valueOf(packet.getData()[10]).equals("49")) {
    // 将设备类型存储起来
    if (String.valueOf(packet.getData()[11]).equals("1")) {
    driver.setType("面板");
    }
    if (String.valueOf(packet.getData()[11]).equals("2")) {
    driver.setType("网关");
    }
    driver.setId(String.valueOf(packet.getData()[12]));
    // 设备Mac地址
    driver.setData(String.valueOf(packet.getData()[4])
    + String.valueOf(packet.getData()[5])
    + String.valueOf(packet.getData()[6]));
    List <Driver> list_tmp=new ArrayList<Driver>();
    GlobalCoutent.listdata.clear();
    list_tmp.add(driver);
    GlobalCoutent.listdata.addAll(list_tmp);
    Message msg = new Message();
    listHandler.sendMessage(msg);
    }}} catch (SocketException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }试试一个效果哦,还是不行.这样就不清楚了,可能是焦点的问题。可能你换台机器试试就可以了
      

  15.   

    http://download.csdn.net/detail/gyymz1992/7673691 我项目上传了 附带测试工具   在测试工具上面建立一个9598的UDPClient端发送测试数据  就可以测试