如何在 onNewIntent 和 Android 4.3 中每秒更新一次 Arraylist



我正在开发一个应用程序,我必须在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);

希望有帮助。

相关内容

  • 没有找到相关文章

最新更新