2013-10-17 5 views
14

Ich verwende eine erweiterbare Listenansicht. Ich habe SetOnChildClickListener in der Onicate-Methode , aber der SetOnChildClickListener funktioniert nicht, ich suchte nach der Lösung in SO, aber ich kann keine Lösung finden. hier geben, was ichErweiterbare Listenansicht setOnChildClickListener funktioniert nicht

public class MenuActivity extends Activity{ 
    ArrayList<MyObject> CatList = new ArrayList<MyObject>(); 
    ArrayList<Object> childItem = new ArrayList<Object>(); 
    ExpandableListView ExList; 

    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
      setContentView(R.layout.menuactivity); 

     ExList=(ExpandableListView) findViewById(R.id.lvMenu) ; 


      ExList.setOnChildClickListener(new OnChildClickListener() { 

      @Override 
      public boolean onChildClick(ExpandableListView parent, View v, 
        int groupPosition, int childPosition, long id) { 

        ShowItem(CatList.get(childPosition).getId()); 

        Toast.makeText(context, ""+CatList.get(childPosition).getId(), 1).show(); 
       // TODO Auto-generated method stub 
       return false; 
      } 
     }); 

    } 


public void ShowItem(int id) 
{ 
    // do something 
} 

    public class ElistAdapt extends BaseExpandableListAdapter { 

public ArrayList<MyObject> groupItem, tempGrpChild; 
public ArrayList<Object> Childtem = new ArrayList<Object>(); 
public LayoutInflater minflater; 
public Activity activity; 


public ElistAdapt(ArrayList<MyObject> GroupList, ArrayList<Object> childItem) { 
    groupItem = GroupList; 
    this.Childtem = childItem; 
} 

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

@Override 
public View getChildView(final int groupPosition, final int childPosition, 
    boolean isLastChild, View convertView, ViewGroup parent) { 
    tempGrpChild = (ArrayList<MyObject>) Childtem.get(groupPosition); 
    TextView text = null; 
    TextView text2 = null; 
    if (convertView == null) { 
    convertView = minflater.inflate(R.layout.childrow, null); 
    } 
    text = (TextView) convertView.findViewById(R.id.textView1); 
    text2 = (TextView) convertView.findViewById(R.id.textView2); 
    text.setText(tempGrpChild.get(childPosition).getName()); 
    text2.setText(tempGrpChild.get(childPosition).getPrice()); 

    return convertView; 
} 

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

@Override 
public Object getGroup(int groupPosition) { 
// return null; 
    return this.groupItem.get(groupPosition); 
} 

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

@Override 
public View getGroupView(final int groupPosition, boolean isExpanded, 
    View convertView, ViewGroup parent) { 

    if (convertView == null) 
      { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.grouprow, null); 
      } 

      TextView tvGroupName = (TextView) convertView.findViewById(R.id.textView1); 
      tvGroupName.setText(groupItem.get(groupPosition).getName()); 


    return convertView; 
} 

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

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

} 
} 

getan hatte mir bitte helfen, warum setOnChildClickListener nicht funktioniert

+1

In öffentlichen Boolean onChildClick ... return true. – TheFlash

+1

Wo haben Sie das Layout Ihrer Aktivität festgelegt? 'setContentView (R.layout.main);'? – GrIsHu

+0

@Jesbin MJ Haben Sie den kompletten Code gepostet? – GrIsHu

Antwort

8

schließlich i seine Arbeits gemacht, entfernte ich die klickbare fokussierbares vom R.layout.childrow xml. jetzt funktioniert es gut

+0

Arbeitete auch für mich :) – biswajitGhosh

28

In Ihrer Adapterklasse geben Sie den wahren Wert in isChildSelectable() -Methode zurück.

+0

So einfach, so dumm;) – Warpzit

+0

hey ich habe ein Anliegen. Für mich funktioniert es halb ... Sieht komisch aus, nicht? Ich meine, es funktioniert zum ersten Mal, wenn ich wieder auf dasselbe Kind klicke, funktioniert es nicht. Weißt du, warum? –

0

@Jesbin MJ hast du mein Leben gerettet !!!

Bitte an alle, die ähnliche Probleme haben: Entfernen Sie das Attribut clickable = "true" aus dem Layout !!! Es funktionierte endlich für mich :)