2015-01-01 4 views
-1

우선 ......... HappyNew Year !!!! 안드로이드 프로그래밍에 대해 배우기 시작하고 실제로 코드를 개발하려고합니다. 주요 아이디어는 페어링 된 블루투스 장치를 검색하고 근처의 모든 BT 장치를 나열하는 것입니다. 나중에 두 장치를 연결하려고 시도하지만 시간을 할애합니다. P작성 목록보기 안드로이드

내 ListView를 채우기 때문에 문제가 쉽게 발생합니다. 쌍을 이룬 사람들과 함께하지만이 코드를 사용하여 나는 내가 발견 한 것을 채울 수 없다 ... 그러나 나는 내가 잘못한 원인을 알지 못한다. Toast.MakeText는이 BT 장치를 보여 주지만 ListView는 아니다. 나를 도와 줄 수 있니??? 많은 감사

// 표시 안드로이드 버전 컨텍스트 context = getApplicationContext();

private ArrayAdapter<String> mDeviceListAdapter; 

크레타에게 어댑터를하고 목록으로 설정 :

//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 (this, android.R.layout.simple_list_item_1, listBT)); * 축하하기 전에 새로운 값을 가진 새 어댑터를 만듭니다. 추신 : 그것은 클래스 변수로 어댑터를 변경하면 더 좋을 것입니다. – Rami

+0

요 응답에 대한 Thx Rami! 그것은 작동합니다! 그래서 .. 내 어댑터를 클래스 변수로 변경하는 것에 대한 아이디어를 줄 수 있습니까? 무슨 소리 야? – Fxbrandon

답변

1

(클래스에서 위) 어댑터의 클래스 변수를 만듭니다

//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