2016-11-03 2 views
0

OnItemClickListener에 문제가 있습니다. 예를 들어 , 내가 목록에서 4 개 블루투스 장치가, 내가 하나 개의 요소를 클릭하고 응용 프로그램이없는 내가 당신의 onItemClick 당신에Listview 및 OnItemClickListener (Bluetooth 장치)

import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothDevice; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import java.lang.reflect.Method; 
import java.util.ArrayList; 


public class bluetooth extends AppCompatActivity { 
    private ListView listView; 
    private ArrayList<String> mDeviceList = new ArrayList<String>(); 
    private BluetoothAdapter mBluetoothAdapter; 
    private final static int REQUEST_ENABLE_BT=1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.bluetooth); 

     listView = (ListView) findViewById(R.id.listView); 
     mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
     mBluetoothAdapter.startDiscovery(); 
     IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
     registerReceiver(mReceiver, filter); 
     if(!mBluetoothAdapter.isEnabled()) 
     { 
      Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
      startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 
      mBluetoothAdapter.startDiscovery(); 
      registerReceiver(mReceiver, filter); 
     } 

    } 

    @Override 
    protected void onDestroy() { 
     unregisterReceiver(mReceiver); 
     super.onDestroy(); 
    } 
    private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, final Intent intent) { 
      final BluetoothDevice device = intent 
       .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
      String action = intent.getAction(); 
      if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
       BluetoothDevice bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
       mDeviceList.add(bluetoothDevice.getName() + "\n" 
        + bluetoothDevice.getAddress()); 
       listView.setAdapter(new ArrayAdapter<String>(context, 
        android.R.layout.simple_list_item_1, mDeviceList)); 
      } 
      listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> adapter, View view, int pos, long id){ 
        String devicep=listView.getAdapter().getItem(pos).toString(); 
        Log.i("device",devicep); 
        pairDevice(device); 
       } 
      }); 
     } 
    }; 

    private void pairDevice(BluetoothDevice b1) { 
     try { 
      Method method = b1.getClass().getMethod("createBond", (Class[]) null); 
      method.invoke(b1, (Object[]) null); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

답변

1

이것은 아마도 'device'변수에 마지막으로 발견 된 장치를 저장했기 때문에 발생했을 것이며, 클릭 한 항목의 위치와 관계없이 pairDevice (device)를 호출하고있는 ListView onItemClick에 있습니다.

당신은 목록에있는 모든 방송 검색된 장치를 저장하고 항목에 따라 목록에서 해당 장치 개체를 얻을 할 수 있습니다,이 같은 것을 클릭 :

private ArrayList<BluetoothDevice> mDevices = new ArrayList<BluetoothDevice>(); 

private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 
    public void onReceive(Context context, final Intent intent) { 
     final BluetoothDevice device = intent 
      .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
     String action = intent.getAction(); 
     if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
      BluetoothDevice bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
      // Add the recently discovered device in a list 
      mDevices.add(bluetoothDevice); 
      mDeviceList.add(bluetoothDevice.getName() + "\n" 
       + bluetoothDevice.getAddress()); 
      listView.setAdapter(new ArrayAdapter<String>(context, 
       android.R.layout.simple_list_item_1, mDeviceList)); 
     } 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapter, View view, int pos, long id){ 
       String devicep=listView.getAdapter().getItem(pos).toString(); 
       Log.i("device",device); 
       // Get the BluetoothDevice corresponding to the clicked item 
       pairDevice(mDevices.get(position)); 
      } 
     }); 
    } 
}; 
0

을 클릭 한 요소와리스트의 마지막 요소 만 페어링 시도 당신이 클릭 한 listitem으로 아무 것도하지 않습니다. 목록에서 항목을 가져 와서 쌍을 이루어야합니다.

BluetoothDevice bluetoothDevice = (BluetoothDevice) listView.getAdapter().getItem(pos); 
       pairDevice(bluetoothDevice); 

작동하는지 확인해보십시오.

+0

아니, 그것은 작동하지 않습니다 의 캐스팅이 허용되지 않기 때문에 응용 프로그램이 작동하지 않습니다. – luc

+0

아아 이제는 DeviceList가 문자열 대신 BluetoothDevices 목록으로 BluetoothDevice로 변경되었으며 목록에 bluetooth 장치를 추가하면 내 코드가 작동해야한다고 생각했습니다. – Gabe

관련 문제