2016-03-23 17 views
0

Ich habe benutzerdefinierte Adapter mit Element mit Kontrollkästchen und Textansicht. Hier ist das Layout des Artikels:OnItemClick Listener funktioniert nicht mit benutzerdefinierten Adapter mit Kontrollkästchen

<?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" 
    /> 

Hier ist, wie die Liste wie folgt aussieht:

enter image description here

Ich mag, wenn Benutzer klickt auf Listenelement oder auf Checkbox ausführen gleiche Aktion. OnItemClick wird jedoch nicht ausgelöst, wenn der Benutzer auf ein Element klickt.

Hier ist mein Code für die Ansicht:

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

Hier ist mein Code für den Adapter:

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

} 

aber es funktioniert nicht.

Antwort

0

Sie sollten Interaktion mit dem Benutzer fügen Sie diese xml

android:clickable="false" 
+0

ich hinzugefügt Checkbox und Textview und es funktioniert nicht. Ich habe auch nur im Root-Tag des Elements XML hinzugefügt und es funktioniert nicht – vikifor

+0

Sie sollten diesen Code kommentieren 'halter.optionCheckBox.setOnClickListener (neue View.OnClickListener() { öffentliche void onClick (View v) { }) " –

0

Ich schlage vor, Sie deaktivieren diese

wie hier innerhalb getView zu tun
@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(); 
    } 
} 
Verwandte Themen