2017-02-14 11 views
0

페어링 된 Bluetooth 장치 목록을 표시하고 사용자가 하나를 선택하도록하고 싶습니다. 라디오 버튼을 사용하여 두 줄의 목록보기 (친숙한 장치 이름에 대해 한 줄, 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 (레이아웃에 비표준 논리를 사용할 수도 있음)에서 어떻게 작동하는지 잘 모르지만 표준 목록보기에서는 보기의 루트 항목에 Checkable 인터페이스을 구현해야합니다. 그렇지 않으면 그냥 대답에 설명 된대로

  • 는 simple_list_item_2_single_choice의 내 사본에서 최상위 뷰를 변경,

    • 있는 LinearLayout에서 파생 된 CheckableLayout을 만든 :

      그래서, this answer에 따라, 나는 다음과 같은했다 .xml에서 CheckableLayout (정규화 된 클래스 이름 필요).

    이러한 변경 사항은 의도 한대로 작동합니다. 항목을 눌러 항목을 검사 할 수 있으며 항목은 라디오 버튼 그룹처럼 작동합니다.

  • 0

    메신저하지 당신이 알아야 할, 그러나 라디오 버튼이 함께 확인을 설정할 수 있습니다 무엇인지 :

    radioButton.setChecked(true); 
    

    을 그리고 당신이보기를 클릭했을 때 라디오 버튼이 선택으로 설정해야 할 경우, 난 당신이 할 수 있다고 생각 귀하의 getView에서 (예 : "라디오"는 레이아웃에 설정된 라디오 ID 임) :

    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; 
    } 
    

    작동하는 경우 알려주십시오.