2017-02-14 106 views
0

我想顯示配對藍牙設備的列表並讓用戶選擇一個。我試圖用單選按鈕創建一個雙行列表視圖(一行代表友好的設備名稱,另一行代表MAC地址)。Android:帶單選按鈕的雙行列表視圖,無法選擇項目

爲此我抄simple_list_item_2_single_choice.xml到我的項目,並創建我用下面的代碼列表視圖:

listView = new ListView(activity); 
listView.setItemsCanFocus(false); 
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
ArrayAdapter<BluetoothDevice> listViewAdapter = new ArrayAdapter<BluetoothDevice>(activity, 
    R.layout.simple_list_item_2_single_choice, android.R.id.text1) { 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 
     TextView text1 = (TextView) view.findViewById(android.R.id.text1); 
     TextView text2 = (TextView) view.findViewById(android.R.id.text2); 

     text1.setText(getItem(position).getName()); 
     text2.setText(getItem(position).getAddress()); 
     return view; 
    } 
}; 
BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter(); 
Set<BluetoothDevice> devices = btAdapter.getBondedDevices(); 
// addAll() is not supported on APIs below 11 
for (BluetoothDevice device : devices) 
    listViewAdapter.add(device); 
listView.setAdapter(listViewAdapter); 

這顯示列表我想要的方式,但我不能選擇任何項目(當我點擊一個項目時單選按鈕保持空白)。是什麼賦予了?

回答

0

不知道這是如何在AOSP中工作的(它們可能使用非標準邏輯進行佈局),但使用標準列表視圖的關鍵是視圖的根項必須實現可檢測接口

因此,基於this answer,我做了以下內容:

  • 創建一個CheckableLayout,從LinearLayout中衍生,如在回答另外說明,只是
  • 改變了頂級鑑於我simple_list_item_2_single_choice副本.xml改爲CheckableLayout(這需要一個完全合格的類名)。

有了這些更改,它可以按預期工作。我可以通過點擊它們來檢查項目,這些項目的行爲就像一組單選按鈕。

0

林不知道你需要什麼就知道了,但單選按鈕可以用這個來設置檢查:

radioButton.setChecked(true); 

如果你需要設置單擊視圖時單選按鈕選中,我認爲你可以做在getView像(其中,「無線」是您radioId在佈局設置):

public View getView(int position, View convertView, ViewGroup parent) { 
    View view = super.getView(position, convertView, parent); 
    TextView text1 = (TextView) view.findViewById(android.R.id.text1); 
    TextView text2 = (TextView) view.findViewById(android.R.id.text2); 
    RadioButton rbutton = (RadioButton) view.findViewById(R.id.radio); 
    view.setOnClickListener(new View.OnClickListener() { 
    @Override 
     public void onClick(View v) { 
      rbutton.setChecked(true); 
     } 
    }); 

    text1.setText(getItem(position).getName()); 
    text2.setText(getItem(position).getAddress()); 
    return view; 
} 

讓我知道,如果作品。