Java 如何在onNewIntent和Android 4.3中每秒更新Arraylist?

Java 如何在onNewIntent和Android 4.3中每秒更新Arraylist?,java,android,android-intent,arraylist,android-4.3-jelly-bean,Java,Android,Android Intent,Arraylist,Android 4.3 Jelly Bean,我正在开发一个应用程序,我必须连接到Android 4.3上的蓝牙设备 我想每秒更新一次Arraylist 在我的申请表中。DeviceControl.java将使用intent和startActivity传输参数 Main.java将从DeviceControl.java接收参数,并像推拉代码一样放入Arraylist Main.java public class Main extends Activity { @Override protected void onCrea

我正在开发一个应用程序,我必须连接到Android 4.3上的蓝牙设备

我想每秒更新一次Arraylist

在我的申请表中。DeviceControl.java将使用intent和startActivity传输参数

Main.java将从DeviceControl.java接收参数,并像推拉代码一样放入Arraylist

Main.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);


    }


但是它没有改变任何事情。

您是否使用了
notifyDataSetChanged()
来更新您的列表

如果没有,则可以在runnable中编写
适配器.notifyDataSetChanged()
。这将更新您的列表。我希望这将对您有所帮助。

请看演示

我猜notifyDataSetChanged()不起作用,因为适配器指向“旧列表”,而不是“新列表”。不要创建新的ArrayList,使用绑定到适配器的ArrayList
试试这个:

ArrayList<HashMap<String, Object>> tmp = new ArrayList<HashMap<String,Object>>();
//set data
list.clear();
list.addAll(tmp);
ArrayList tmp=new ArrayList();
//设置数据
list.clear();
list.addAll(tmp);

希望能有所帮助。

你确定onNewInten每秒钟都有人打电话吗?我不是每秒钟都打电话给onNewIntent,我只是打了一次。但是我希望它在每次调用后每秒更新一次。但是这些数组会发生什么变化:名称、电池、rssi、地址?当它第一次调用时,它会显示名称、地址、rssi、电池。我在onNewIntent中标记for循环,然后转到runnable。放入,但它没有显示任何内容,列表为空。我是否应该将for循环中的所有代码放入runnable??或者我只需要将adapter.notifyDataSetChanged()放入runnable??adapter中。notifyDataSetChanged()只是通知您的适配器列表中发生的更改,并更新列表,但您还需要编写代码,在线程内的列表中进行更改。请告诉我到底发生了什么变化。你能告诉我你在哪里更改列表吗。
item.put("RSSI", rssi[i]);
item.put("Battery", battery[i]);
item.put("RSSI", "11111:" + rssi[i]);
item.put("Battery", "22222:" + battery[i]);
ArrayList<HashMap<String, Object>> tmp = new ArrayList<HashMap<String,Object>>();
//set data
list.clear();
list.addAll(tmp);