Handler更新ListVie handler listViewudp 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第一次发帖,希望好心人解答,每次收到Socket数据以后必须点击输入框,当弹出软键盘后listView才会更新出来. listview.setAdapter(lAdt);怎么跑到子线程里去设置了? Quote: 引用 2 楼 lionfresh 的回复:listview.setAdapter(lAdt);怎么跑到子线程里去设置了?[/quote]那一句不要也是那个效果 调试两天无果.各种方法试试. 不知道你UDPAdapter是怎么写的,至少从你贴出来的代码上我看不到你对adapter数据的更改 // Handler处理机制class ListHandler extends Handler {private Adapter adt;public ListHandler(Adapter adt) {this.adt = adt;}@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);//lAdt = new UDPAdapter(mContext,GlobalCoutent.listdata);//listview.setAdapter(lAdt);lAdt.notifyDataSetChanged(); //发送消息通知ListView更新//listview.setAdapter(lAdt); // 重新设置ListView的数据适配器}}这个不是对ListVIew的更改么? 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; }} 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(); } } } } 你要修改的是绑定到adapter的数据,你这里就是 List<Driver> list 你要修改的是绑定到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只是你必须要点击我这个界面的一个输入框 它才会把更新的数据显示出来. listview.setAdapter(lAdt);这句只需要你在初始化listview和adapter后执行就行了,其他地方都不需要再set,更新只需要 lAdt.notifyDataSetChanged(); lAdt.notifyDataSetChanged(); 因为只有这句话是凡没有任何效果的 我才加上后面一句的. 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// SSIDprivate 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;@Overrideprotected 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 handlerlistHandler = new ListHandler(lAdt);// 向list handler发送消息请求更新devSearchListMessage msg = new Message();listHandler.sendMessage(msg);}// Handler处理机制class ListHandler extends Handler {private Adapter adt;public ListHandler(Adapter adt) {this.adt = adt;}@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);//lAdt = new UDPAdapter(mContext,GlobalCoutent.listdata);lAdt.notifyDataSetChanged(); //发送消息通知ListView更新}}private class OnItemClickListenerDevSearchList implements OnItemClickListener {@Overridepublic void onItemClick(AdapterView<?> adapter, View view,int position, long arg3) {listview.getItemAtPosition(position);}}private void initListView() {// TODO Auto-generated method stublistview = (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;}@Overridepublic 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();}}}}试试 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// SSIDprivate 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;@Overrideprotected 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 handlerlistHandler = new ListHandler(lAdt);// 向list handler发送消息请求更新devSearchListMessage msg = new Message();listHandler.sendMessage(msg);}// Handler处理机制class ListHandler extends Handler {private Adapter adt;public ListHandler(Adapter adt) {this.adt = adt;}@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);//lAdt = new UDPAdapter(mContext,GlobalCoutent.listdata);lAdt.notifyDataSetChanged(); //发送消息通知ListView更新}}private class OnItemClickListenerDevSearchList implements OnItemClickListener {@Overridepublic void onItemClick(AdapterView<?> adapter, View view,int position, long arg3) {listview.getItemAtPosition(position);}}private void initListView() {// TODO Auto-generated method stublistview = (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;}@Overridepublic 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();}}}}试试一个效果哦,还是不行. 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// SSIDprivate 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;@Overrideprotected 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 handlerlistHandler = new ListHandler(lAdt);// 向list handler发送消息请求更新devSearchListMessage msg = new Message();listHandler.sendMessage(msg);}// Handler处理机制class ListHandler extends Handler {private Adapter adt;public ListHandler(Adapter adt) {this.adt = adt;}@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);//lAdt = new UDPAdapter(mContext,GlobalCoutent.listdata);lAdt.notifyDataSetChanged(); //发送消息通知ListView更新}}private class OnItemClickListenerDevSearchList implements OnItemClickListener {@Overridepublic void onItemClick(AdapterView<?> adapter, View view,int position, long arg3) {listview.getItemAtPosition(position);}}private void initListView() {// TODO Auto-generated method stublistview = (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;}@Overridepublic 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();}}}}试试一个效果哦,还是不行.这样就不清楚了,可能是焦点的问题。可能你换台机器试试就可以了 http://download.csdn.net/detail/gyymz1992/7673691 我项目上传了 附带测试工具 在测试工具上面建立一个9598的UDPClient端发送测试数据 就可以测试 android 通过USB 连接,使用 ftp 服务,类似豌豆夹的 文件管理 大拿们给普及下Funambol ds这方面的知识 安卓开发环境安装问题 实在不会做了,关于apk签名对比 service后台播放问题 TabActivity类似效果 手机应用软件开发技术 GridView 的item高度很高,快崩溃了 关于logcat中输出错误:编码GBK的不可映射字符问题。 android studio的jni调试是怎么使用LLDB调试的 如何从一个activity跳转到另一个activity的某一个界面啊 android 下拉框
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的更改么?
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;
}
}
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();
}
}
}
}
你要修改的是绑定到adapter的数据,你这里就是 List<Driver> list
你要修改的是绑定到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
只是你必须要点击我这个界面的一个输入框 它才会把更新的数据显示出来.
这句只需要你在初始化listview和adapter后执行就行了,其他地方都不需要再set,更新只需要 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();
}
}
}
}试试
因为只有这句话是凡没有任何效果的 我才加上后面一句的.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();
}
}
}
}试试一个效果哦,还是不行.
因为只有这句话是凡没有任何效果的 我才加上后面一句的.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();
}
}
}
}试试一个效果哦,还是不行.这样就不清楚了,可能是焦点的问题。可能你换台机器试试就可以了