2015-01-01 3 views
-1

Прежде всего .... HappyNew Year !!!! Я начинаю узнавать об Android-программировании, и на самом деле я пытаюсь разработать код. Основная идея - поиск парных устройств Bluetooth, а также список всех устройств BT рядом ... позже я попытаюсь подключить оба устройства, но время от времени: PЗаполнение ListView Android

Моя проблема должна быть простой, потому что я заполняю свой ListView с парными, но используя этот код, я не могу заполнить его, который я обнаружил ... Но я не знаю, что я делаю неправильно, потому что Toast.MakeText показывает эти устройства BT, но не в ListView .... Любой может мне помочь ??? Many Thanks

// SHOW ANDROID VERSION Контекстный контекст = getApplicationContext();

//Setting up for JELLY_BEAN_MR1 and above 
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) { 

     BluetoothManager bluetoothManager = (BluetoothManager)context.getSystemService(Context.BLUETOOTH_SERVICE); 

     if (bluetoothManager != null) 
     { 
      mBluetoothAdapter = bluetoothManager .getAdapter(); 
     } 
    } else { 

     mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
    } 

    //Enable 
    if (!mBluetoothAdapter.isEnabled()) { 
     Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
    } 
    //Discover my BT 
    Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
    discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); 
    startActivity(discoverableIntent); 

    //Paired Devices 
    pairedDevices = mBluetoothAdapter.getBondedDevices(); 
    final ArrayList<String> listBT = new ArrayList<String>(); 
    ListView lv =(ListView)findViewById(R.id.listDevicesFound); 
    for(BluetoothDevice bt : pairedDevices) 
     listBT.add(bt.getName()); 

    //Starting Search 
    final BroadcastReceiver mReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      if(BluetoothDevice.ACTION_FOUND.equals(action)){ 
       BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
       listBT.add(device.getName()); //Something happens but not adding to ListView 
       Toast.makeText(getApplicationContext(), device.getName(), 
         Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }; 

    registerReceiver(mReceiver, new IntentFilter(BluetoothDevice.ACTION_FOUND)); 
    mBluetoothAdapter.startDiscovery(); 

    //Show ListView 
    lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , listBT)); 
+0

Я думаю, вы ms добавляются в * listBT *, но не в listView * lv *. Вы должны обновить данные вашего адаптера списка * onReceive() *. Попробуйте добавить эту строку: * lv.setAdapter (новый ArrayAdapter (это, android.R.layout.simple_list_item_1, listBT)); * перед тостом он создаст новый адаптер с новыми значениями. PS: будет лучше, если вы измените свой адаптер как переменную класса. – Rami

+0

Thx for yor ответить Рами! Оно работает! Итак, можете ли вы дать мне представление об изменении моего адаптера в качестве переменной класса? Что вы имеете в виду? – Fxbrandon

ответ

1

Создайте переменный класс для адаптера (выше в своем классе):

private ArrayAdapter<String> mDeviceListAdapter; 

КРИТА адаптер и установить его в список:

//Show ListView 
    mDeviceListAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , listBT); 
    lv.setAdapter(mDeviceListAdapter); 

Обновления данных адаптера при у вас есть новый товар:

@Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      if(BluetoothDevice.ACTION_FOUND.equals(action)){ 
       BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
       listBT.add(device.getName()); 
       if(mDeviceListAdapter!=null){ 
        mDeviceListAdapter.add(device.getName()); 
        mDeviceListAdapter.notifyDataSetChanged(); 
       } 
       Toast.makeText(getApplicationContext(), device.getName(), 
         Toast.LENGTH_SHORT).show(); 
      } 
     } 
+0

Много thx Rami !!!! – Fxbrandon

Смежные вопросы