2013-02-18 102 views
0

setOnGroupExpandListener()工作正常,但子节点未调用。可能是什么问题?无法在可扩展列表视图中实现onChildClick()

活动类:

public class MainActivity extends ExpandableListActivity{ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ExpandableListView expandbleLis = getExpandableListView(); 
     expandbleLis.setDividerHeight(2); 
     expandbleLis.setGroupIndicator(null); 
     //expandbleLis.setClickable(true); 

     setGroupData(); 
     setChildGroupData(); 

     NewAdapter mNewAdapter = new NewAdapter(groupItem, childItem); 
     mNewAdapter.setInflater((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE),this); 
     getExpandableListView().setAdapter(mNewAdapter); 


     expandbleLis.setOnGroupExpandListener(new OnGroupExpandListener() 
      { 
      public void onGroupExpand(int groupPosition) 
      { 
      Log.e("onGroupExpand", "OK"); 
      } 
      }); 

     expandbleLis.setOnGroupCollapseListener(new OnGroupCollapseListener() 
      { 
      public void onGroupCollapse(int groupPosition) 
      { 
      Log.e("onGroupCollapse", "OK"); 
      } 
      }); 

     expandbleLis.setOnChildClickListener(new OnChildClickListener() 
      { 
      @Override 
      public boolean onChildClick(ExpandableListView parent, View v, 
      int groupPosition, int childPosition, long id) { 
      Log.e("OnChildClickListener", "OK"); 
      return false; 
      } 
      }); 
    } 

    public void setGroupData() { 
     groupItem.add("TechNology"); 
     groupItem.add("Mobile"); 
     groupItem.add("Manufacturer"); 
     groupItem.add("Extras"); 
    } 

    ArrayList<String> groupItem = new ArrayList<String>(); 
    ArrayList<Object> childItem = new ArrayList<Object>(); 

    public void setChildGroupData() { 
     /** 
     * Add Data For TecthNology 
     */ 
     ArrayList<String> child = new ArrayList<String>(); 
     child.add("Java"); 
     child.add("Drupal"); 
     child.add(".Net Framework"); 
     child.add("PHP"); 
     childItem.add(child); 

     /** 
     * Add Data For Mobile 
     */ 
     child = new ArrayList<String>(); 
     child.add("Android"); 
     child.add("Window Mobile"); 
     child.add("iPHone"); 
     child.add("Blackberry"); 
     childItem.add(child); 
     /** 
     * Add Data For Manufacture 
     */ 
     child = new ArrayList<String>(); 
     child.add("HTC"); 
     child.add("Apple"); 
     child.add("Samsung"); 
     child.add("Nokia"); 
     childItem.add(child); 
     /** 
     * Add Data For Extras 
     */ 
     child = new ArrayList<String>(); 
     child.add("Contact Us"); 
     child.add("About Us"); 
     child.add("Location"); 
     child.add("Root Cause"); 
     childItem.add(child); 
    } 


     } 

适配器:

@SuppressWarnings("unchecked") 
public class NewAdapter extends BaseExpandableListAdapter { 

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

    public NewAdapter(ArrayList<String> grList, ArrayList<Object> childItem) { 
     groupItem = grList; 
     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(int groupPosition, final int childPosition, 
      boolean isLastChild, View convertView, ViewGroup parent) { 
     tempChild = (ArrayList<String>) Childtem.get(groupPosition); 
     TextView text = null; 
     if (convertView == null) { 
      convertView = minflater.inflate(R.layout.childrow, null); 
     } 
     text = (TextView) convertView.findViewById(R.id.textView1); 
     text.setText(tempChild.get(childPosition)); 
     /*convertView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(activity, tempChild.get(childPosition), 
         Toast.LENGTH_SHORT).show(); 
      } 
     });*/ 
     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 0; 
    } 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, 
      View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = minflater.inflate(R.layout.grouprow, null); 
     } 
     ((CheckedTextView) convertView).setText(groupItem.get(groupPosition)); 
     //((CheckedTextView) convertView).setChecked(isExpanded); 
     return convertView; 
    } 

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

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

} 

回答

1

请在您的适配器该方法返回true。

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

,也什么用ExpandableListActivity如果要手动设置的听众喜欢onChildClickListebner点。只需在ExpandableListActivity中覆盖onChildClick()方法即可。您也可以覆盖ExpandableListActivity中的方法,如onGroupExpand()onGroupCollapse()http://developer.android.com/reference/android/app/ExpandableListActivity.html

+0

@ M-Waheh现在感谢你的工作 – 2013-02-18 15:00:30