Autore Topic: setOnChildClickListener non intercetta click.  (Letto 412 volte)

Offline Fullydroid

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: +1
    • Mostra profilo
setOnChildClickListener non intercetta click.
« il: 28 Luglio 2014, 15:24:40 CEST »
0
Ciao a tutti ragazzi!

setOnChildClickListener è diventato il mio incubo!
Avro' letto 1000 guide ma non riesco proprio capire perchè non riesco intercettare questo dannato evento!

vi posto il mio codice:

Partiamo dall' XML

layout del child.

Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/editValue"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:enabled="false" >

    </EditText>

</LinearLayout>

layout del group.

Codice: [Seleziona]
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <CheckedTextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="45dp"
        android:gravity="center_vertical"
        android:padding="10dp"
        android:text="ciaoo"
        android:textColor="@android:color/background_dark"
        android:textSize="16sp"
        android:textStyle="bold" />
   
</LinearLayout>

adapter:

Codice: [Seleziona]
public class ExpandableListAdapter extends BaseExpandableListAdapter {

   public ArrayList<String> groupItem, tempChild;
   public ArrayList<Object> Childtem = new ArrayList<Object>();
   public LayoutInflater minflater;
   public Activity activity;
   public Context context;

   public ExpandableListAdapter(ArrayList<String> grList, ArrayList<Object> childItem,Context c) {
    groupItem = grList;
    this.Childtem = childItem;
    this.context = c ;
   }

   public void setInflater(LayoutInflater mInflater, Activity act) {
    this.minflater = mInflater;
    activity = act;
   }

   @Override
   public Object getChild(int groupPosition, int childPosition) {
    return null;
   }

   @Override
   public long getChildId(int groupPosition, int childPosition) {
    return 0;
   }
   
   /**
    * Restituisce il child .
    */
   @Override
   public View getChildView(int groupPosition, final int childPosition,
     boolean isLastChild, View convertView, ViewGroup parent) {
    tempChild = (ArrayList<String>) Childtem.get(groupPosition);
    minflater = (LayoutInflater) context
          .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    EditText text = null;
    if (convertView == null) {
     convertView = minflater.inflate(R.layout.childrow_list_expandable, null);
    }
    /*setto testo Hint*/
    text = (EditText) convertView.findViewById(R.id.editValue);
    text.setHint(tempChild.get(childPosition));

    return convertView;
   }

   @Override
   public int getChildrenCount(int groupPosition) {
    return ((ArrayList<String>) Childtem.get(groupPosition)).size();
   }

   @Override
   public Object getGroup(int groupPosition) {
    return null;
   }

   @Override
   public int getGroupCount() {
    return groupItem.size();
   }

   @Override
   public void onGroupCollapsed(int groupPosition) {
    super.onGroupCollapsed(groupPosition);
   }

   @Override
   public void onGroupExpanded(int groupPosition) {
    super.onGroupExpanded(groupPosition);
   }

   @Override
   public long getGroupId(int groupPosition) {
    return groupPosition;
   }

   /**
    * Restituisce il gruppo dei figli.
    */
   @Override
   public View getGroupView(int groupPosition, boolean isExpanded,
     View convertView, ViewGroup parent) {
      minflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
     convertView = minflater.inflate(R.layout.groupitem_list_expandable, null);
    }
    CheckedTextView a = (CheckedTextView) convertView.findViewById(R.id.textView1);
    a.setText(groupItem.get(groupPosition));
    a.setChecked(isExpanded);
    return convertView;
   }

   @Override
   public boolean hasStableIds() {
    return false;
   }

   @Override
   public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
   }

  }


main

Codice: [Seleziona]
   final ExpandableListAdapter mNewAdapter = new ExpandableListAdapter(groupItem, childItem,getActivity());
       /*Setto adpater*/
       DataAccess.setAdapter(mNewAdapter);
       /*la prima volta che apro il Fragment visualizzo la lista espansa.*/
       int count = mNewAdapter.getGroupCount();
       for (int position = 1; position <= count; position++)
           DataAccess.expandGroup(position - 1);
       
       /*Setto evento su ogni child click*/
       DataAccess.setOnChildClickListener(new OnChildClickListener() {
         
         @Override
         public boolean onChildClick(ExpandableListView parent, View v,
               int groupPosition, int childPosition, long id) {
            final View save = (View)mNewAdapter.getChild(groupPosition, childPosition);
             
          /*non arriva qui**/
            return false;
         }
      });


ragazzi vi sarei davvero grato se trovate la soluzione al mio problema che mi affligge da giorni!
Grazie in anticipo.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 717
  • Respect: +151
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:setOnChildClickListener non intercetta click.
« Risposta #1 il: 28 Luglio 2014, 15:39:30 CEST »
0
Credo dipenda dal fatto che nel layout del "child" ci sia un elemento selezionabile (EditText).

Prova a mettere false su focusable e focusableOnTouchMode:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >

    <EditText
       android:id="@+id/editValue"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:ems="10"
       android:enabled="false"
       android:focusable="false"
       android:focusableInTouchMode="false">

    </EditText>

</LinearLayout>

Edit: Dimenticavo di dire che così facendo risolvi il problema ma potresti avere effetti collaterali.

In questo topic viene spiegato quali sono questi effetti collaterali e come risolverli.
« Ultima modifica: 28 Luglio 2014, 15:44:14 CEST da Ohmnibus »
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Fullydroid

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: +1
    • Mostra profilo
Re:setOnChildClickListener non intercetta click.
« Risposta #2 il: 28 Luglio 2014, 15:45:40 CEST »
0
Credo dipenda dal fatto che nel layout del "child" ci sia un elemento selezionabile (EditText).

Prova a mettere false su focusable e focusableOnTouchMode:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >

    <EditText
       android:id="@+id/editValue"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:ems="10"
       android:enabled="false"
       android:focusable="false"
       android:focusableInTouchMode="false">

    </EditText>

</LinearLayout>

Edit: Dimenticavo di dire che così facendo risolvi il problema ma potresti avere effetti collaterali.

In questo topic viene spiegato quali sono questi effetti collaterali e come risolverli.


Ciao,grazie per la risposta!
Purtroppo avevo gia' provato in questo modo :(
Niente da fare l'evento non viene intercettato...