2015-05-12 159 views
1

在我的Android應用程序中,我有一個顯示藍牙設備的ListActivity。我有一個ArrayList<BluetoothDevice>ArrayAdapter<BluetoothDevice>。一切正常,但有一個問題。每個BluetoothDevice在列表中顯示爲MAC地址,但我需要顯示其名稱。覆蓋最終BluetoothDevice類的toString()方法

因爲我知道每個對象的適配器調用toString方法。但是BluetoothDevice返回MAC地址,如果你打電話給toString。所以解決方法是重寫toString並返回名稱而不是地址。但BluetoothDevice是最後一堂課,所以我無法覆蓋它!

任何想法如何強制藍牙設備返回其名稱,而不是地址? toString

+1

擴展ArrayAdapter並使用其他方法適配器代替的toString – Zelldon

+0

裏面我覺得這是最好的解決辦法。謝謝! – DanielH

+0

thx爲響應 - 我添加了我的評論作爲回答 – Zelldon

回答

1

正如我在評論已經提到的,你可以擴展一個ArrayAdapter和 使用另一種方法,而不是toString方法。

爲了舉例,像這樣:

public class YourAdapter extends ArrayAdapter<BluetoothDevice> { 
    ArrayList<BluetoothDevice> devices; 
    //other stuff 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    //get view and the textView to show the name of the device 
    textView.setText(devices.get(position).getName()); 
    return view; 
} 
} 
2

一旦你有你的ArrayList

ArrayList<BluetoothDevice> btDeviceArray = new ArrayList<BluetoothDevice>(); 
ArrayAdapter<String> mArrayAdapter; 

現在你可以在onCreateView添加設備,例如:

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
mArrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_expandable_list_item_1); 
     setListAdapter(mArrayAdapter); 

Set<BluetoothDevice> pariedDevices = mBluetoothAdapter.getBondedDevices(); 
     if(pariedDevices.size() > 0){ 
      for(BluetoothDevice device : pariedDevices){ 
       mArrayAdapter.add(device.getName() + "\n" + device.getAddress()); 
       btDeviceArray.add(device); 
      } 
     } 

因此請注意,您可以用.getName()方法得到的名稱。這解決了你的問題?

+0

但ArrayList和ArrayAdapter必須包含相同類型的對象。在您的建議中,ArrayList包含BluetoothDevice對象,而ArrayAdapter包含String對象。這會引發錯誤... – DanielH

3

,你可以用的組合物,而不是繼承:

public static class MyBluetoothDevice { 
    BluetoothDevice mDevice; 
    public MyBluetoothDevice(BluetoothDevice device) { 
     mDevice = device; 
    } 

    public String toString() { 
      if (mDevice != null) { 
      return mDevice.getName(); 
      } 
      // fallback name 
      return ""; 
    } 
} 

和關閉過程的ArrayAdapter,將使用MyBluetoothDevice,而不是BluetoothDevice

+0

是的,這可能是解決方案。但是我使用BluetoothDevice的很多方法和領域,所以我將在MyBluetoothDevice類中實現所有這些方法... – DanielH

+1

您可以使用返回BluetoothDevice對象的getter – Blackbelt