2013-10-17 12 views
14

Używam rozwijanego widoku listy. Otrzymałem setOnChildClickListener wewnątrz metody Onceate, , ale setOnChildClickListener nie działa, szukałem rozwiązania w SO, ale nie mogę znaleźć żadnego rozwiązania. tutaj dając co zrobiłemWidok listy rozwijanej setOnChildClickListener nie działa

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

} 
} 

proszę mi pomóc dlaczego setOnChildClickListener nie działa

+1

W public boolean onChildClick ... return true. – TheFlash

+1

Gdzie ustawiłeś układ swojej aktywności? 'setContentView (R.layout.main);'? – GrIsHu

+0

@Jesbin MJ Czy zamieściłeś pełny kod? – GrIsHu

Odpowiedz

8

wreszcie zrobiłem swoją pracę, usunąłem klikalne, aktywowana z xml R.layout.childrow. teraz działa dobrze

+0

Pracowałem też dla mnie :) – biswajitGhosh

28

W klasie adaptera zwracaj wartość true w metodzie isChildSelectable().

+0

Tak prosty, taki głupi;) – Warpzit

+0

Hej, mam problem. Dla mnie to połowa pracy ... Wygląda dziwnie, prawda? To znaczy, działa po raz pierwszy, jeśli kliknę ponownie to samo dziecko, to nie działa. Wiesz dlaczego? –

0

@Jesbin MJ uratowałeś mi życie !!!

Proszę, dla każdego, kto ma podobny problem: usuń atrybut clickable = "true" z układu !!! W końcu zadziałało dla mnie :)