2016-03-23 6 views
0

У меня есть пользовательский адаптер с элементом с флажком и текстовым полем. Вот расположение пункта:OnItemClick прослушиватель не работает с пользовательским адаптером с флажком

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:padding="@dimen/standard_margin" 
> 

<CheckBox 
    android:id="@+id/checkBox1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:focusable="false" 
    android:focusableInTouchMode="false" 
    /> 
<TextView 
    android:id="@+id/checkBoxDesc" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="TextView" 
    android:layout_marginLeft="@dimen/new_small_margin" 
    android:layout_alignBaseline="@+id/isEbank" 
    android:layout_alignBottom="@+id/isEbank" 
    android:layout_toRightOf="@+id/isEbank" 
    android:layout_alignTop="@+id/isEbank" 
    android:gravity="left" 
    android:focusable="false" 
    android:focusableInTouchMode="false" 
    /> 

Вот как список выглядит следующим образом:

enter image description here

Мне нравится, когда пользователь нажимает на элемент списка, или на поле, чтобы выполнить такое же действие. Однако onItemClick не срабатывает, когда пользователь нажимает на элемент.

Вот мой код для просмотра:

@Override 
public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) { 
    View mRoot = inflater.inflate(R.layout.fragment_user, container, false); 

    ArrayList<Option> listOptions=new ArrayList<Option>(); 
    Option optionYes=new Option(true,getResources().getString(R.string.Yes)); 
    listOptions.add(optionYes); 
    Option optionNo=new Option(false,getResources().getString(R.string.No)); 
    listOptions.add(optionNo); 
    listView=(ListView)mRoot.findViewById(R.id.lst); 
    adapter=new OptionAdapter(getActivity(),R.layout.item_option,listOptions); 
    listView.setAdapter(adapter); 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      CheckBox box = (CheckBox) view.findViewById(R.id.checkBox1); 
      box.setChecked(true); 
     } 
    }); 
    return mRoot; 
} 

Вот мой код адаптера:

@Override 
public View getView(int position, View convertView, final ViewGroup parent) { 
    final Option selectedOption = optionsList.get(position); 
    ViewHolder holder = null; 
    if (convertView == null) { 

     LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.item_option, null); 

     holder = new ViewHolder(); 
     holder.optionDesc = (TextView) convertView.findViewById(R.id.optionDesc); 
     holder.optionDesc.setText(selectedOption.getDesc()); 
     holder.optionCheckBox = (CheckBox) convertView.findViewById(R.id.isEbank); 
     holder.optionCheckBox.setFocusable(false); 
     holder.optionCheckBox.setFocusableInTouchMode(false); 

     convertView.setTag(holder); 

     holder.optionCheckBox.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 

     }); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 


    return convertView; 

} 

Однако это не работает.

ответ

0

следует отключить взаимодействие с пользователем добавьте в XML

android:clickable="false" 
+0

Я добавил к Checkbox и TextView и он не работает. Я добавил также только в корневой тег элемента xml и он не работает – vikifor

+0

Вы должны прокомментировать этот код 'holder.optionCheckBox.setOnClickListener (новый View.OnClickListener() { public void onClick (View v) { }) ;» –

0

Я предлагаю вам сделать это внутри getView как здесь

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
if (convertView == null) { 
    LayoutInflater vi = (LayoutInflater)getSystemService(
    Context.LAYOUT_INFLATER_SERVICE); 
    convertView = vi.inflate(R.layout.item_option, null); 

holder = new ViewHolder(); 
    holder.name = (CheckBox) convertView.findViewById(R.id.checkBox1); 
    convertView.setTag(holder); 

holder.name.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     CheckBox cb = (CheckBox) v ; 
    //Check if cb is checked or not here 
     cb.isChecked(); 
    }); 
    } 
    else { 
    holder = (ViewHolder) convertView.getTag(); 
    } 
}