2013-04-13 44 views
1

所以我有一个可扩展的列表视图。我想要的是让每个孩子都可点击。如果我按第一个,我想打开class1,如果我按第二个,我想打开class2,如果我按第三个,我想打开class3,等等......我是编程新手请解释我,就像你会做一个傻逼。如何在这个例子中实现onchildclick监听器?

这是我的活动

public class Mecanica extends ExpandableListActivity implements OnChildClickListener { 

    @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.setOnChildClickListener(this); 
    } 

    public void setGroupData() { 
     groupItem.add("Directia"); 
     groupItem.add("Franarea"); 
     groupItem.add("Motorul"); 
     groupItem.add("Rotile"); 
     groupItem.add("Siguranta si control"); 
     groupItem.add("Suspensia"); 
     groupItem.add("Transmisia"); 
    } 

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

回答

1

我无法找到你的OnChildClickListener,你应该执行。

这将让您访问点击特定的孩子,因此您的List项目中的位置。

实现可能看起来像这个例子:

@Override 
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 
    // Create a switch that switches on the specific child position. 
    switch(childPosition) { 
    case 0: 
     // Go to child #0 specific class. 
     Intent child0Intent = new Intent(this, Child0Activity.class); 
     startActivity(child0Intent); 
     break; 
    case 1: 
     // Go to child #1 specific class. 
     Intent child1Intent = new Intent(this, Child1Activity.class); 
     startActivity(child1Intent); 
     break; 
    } 
    return false; 
} 

如何实现它完整的例子可以在这里找到:

http://www.mysamplecode.com/2012/10/android-expandablelistview-example.html

+0

我已经放在你的代码结束的Activity类,但我不知道它是否好,因为我需要每个孩子打开一个特定的类。 – user2152480

+0

该链接并没有帮助我 – user2152480

+0

好的,我不明白的是我在哪里添加所有3个类,我希望每个不同的项目打开时点击。在你的例子中,你只需要打开MyChildActivity类,但对于每一个孩子我想打开另一个类。这是我的问题 – user2152480