我正在开发一个应用程序,我必须在Android 4.3上连接到蓝牙设备。
我想每秒更新一次数组列表。
在我的应用程序中。设备控件.java将使用意图和启动活动传输参数。
主.java将从 DeviceControl 接收参数.java并像 dollowing 代码一样放入 Arraylist。
主.java
public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
onNewIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
setIntent(intent);
for(int i = 0;i<5;i++)
{
if(address[i].length() != 1) {
HashMap<String, Object> item = new HashMap<String, Object>();
item.put("name", name[i]);
item.put("address", address[i]);
item.put("RSSI", rssi[i]);
item.put("Battery", battery[i]);
list.add(item);
mdeviceAddress = address[i];
} else if(address[i].length() == 1)
break;
}
mHandler.postDelayed(addlist, 1000); //update the list
adapter = new SimpleAdapter(this, list, R.layout.device_list_name_address,
new String[] {"name", "address", "RSSI", "Battery"},
new int[] {R.id.device_name, R.id.device_address, R.id.device_rssi, R.id.device_battery} );
devicelist.setAdapter(adapter);
}
但它仅在 DeviceControl 启动意图时更新列表.java一次。我希望它始终在设备控制后更新列表.java启动意图。
我尝试在 Runnable 中键入 Arraylist 的代码,但它不起作用。
我应该怎么做才能使数组列表自动更新?
编辑
我添加以下可运行的代码
final Runnable addlist = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
for(int i = 0;i<5;i++)
{
if(address[i].length() != 1){
ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String,Object>>();
HashMap<String, Object> item = new HashMap<String, Object>();
item.put("name", name[i]);
item.put("address", address[i]);
item.put("RSSI", "11111:" + rssi[i]);
item.put("Battery", "22222:" + battery[i]);
list.add(item);
Log.v(TAG, "onNewIntent----------------------------");
mdeviceAddress = address[i];
Log.v(TAG, "address[" + i + "] = " + address[i]);
Log.v(TAG, "GATT[" + i + "] = " + gatt[i]);
//並連線到此Address
Intent gattServiceIntent = new Intent(Main.this, BluetoothLeService.class);
registerReceiver(mGattUpdateReceiver, makeGattUpdateIntentFilter());
bindService(gattServiceIntent, mServiceConnection, BIND_AUTO_CREATE);
}else if(address[i].length() == 1)
break;
}
adapter.notifyDataSetChanged();
mHandler.postDelayed(this, 1500);
}
};
并在 for 循环之后在 OnNewIntent 中键入 mHandler.postDelayed(addlist, 1000);
。该列表应从
item.put("RSSI", rssi[i]);
item.put("Battery", battery[i]);
自
item.put("RSSI", "11111:" + rssi[i]);
item.put("Battery", "22222:" + battery[i]);
但这并没有改变任何东西。
您是否使用notifyDataSetChanged()
来更新您的列表?
如果没有,那么您可以编写可运行的adapter.notifyDataSetChanged()
。这将更新您的列表。我希望这对你有帮助。
查看演示 http://xjaphx.wordpress.com/2011/07/15/listview 合一活动不刷新数据发送另一个活动/
我猜通知DataSetChanged()不起作用,因为适配器指向"旧列表",而不是"新列表"。不要创建新的 ArrayList,使用绑定到适配器的 ArrayList。
试试这个:
ArrayList<HashMap<String, Object>> tmp = new ArrayList<HashMap<String,Object>>();
//set data
list.clear();
list.addAll(tmp);
希望有帮助。