ExpandableListView启动新活动

时间:2013-09-23 11:35:38

标签: android listview onclicklistener

当我想从孩子开始一项新活动时,我遇到了问题 在ExpandableListView

我的代码:

package com.multilayerexpandable;

import java.util.ArrayList;

import android.app.ExpandableListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.Toast;

public class MainActivity 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("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);
    }

    @Override
    public boolean onChildClick(ExpandableListView parent, View v,
            int groupPosition, int childPosition, long id) {
        Toast.makeText(MainActivity.this, "Clicked On Child",
                Toast.LENGTH_SHORT).show();
        return true;
    }
}

适配器

package com.multilayerexpandable;

import java.util.ArrayList;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckedTextView;
import android.widget.TextView;
import android.widget.Toast;

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

}

问题是当我点击那个孩子时如何开始新的活动。 喜欢HTC并开始新的HTC活动。

4 个答案:

答案 0 :(得分:0)

这样,您就可以访问已点击的特定子项,从而可以访问项目列表中的位置。

实现看起来像这个例子:

 @Override
  public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
     Toast.makeText(MainActivity.this, "Clicked On Child"+childPosition,
            Toast.LENGTH_SHORT).show();
    // Go to child #0 specific class.
    Intent child0Intent = new Intent(this, Child0Activity.class);
    startActivity(child0Intent);
 }
return false;
}

可以找到here:

的完整示例

答案 1 :(得分:0)

expListView.setOnChildClickListener(new OnChildClickListener() {

            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                    int groupPosition, int childPosition, long id) {
                if(groupPosition==0){
                    if(childPosition == 0){
                        Intent child0Intent = new Intent(getBaseContext(), Child0Activity.class);
                        startActivity(child0Intent);}
                    if(childPosition == 1){
                        Intent child1Intent = new Intent(getBaseContext(), Child1Activity.class);
                        startActivity(child1Intent);}
                    if(childPosition == 2){
                        Intent child2Intent = new Intent(getBaseContext(), Child2Activity.class);
                        startActivity(child2Intent);}
                }
                if(groupPosition==1){
                    if(childPosition == 3){
                        Intent child3Intent = new Intent(getBaseContext(), Child3Activity.class);
                        startActivity(child3Intent);}
                    if(childPosition == 4){
                        Intent child4Intent = new Intent(getBaseContext(), Child4Activity.class);
                        startActivity(child4Intent);}
                    if(childPosition == 5){
                        Intent child5Intent = new Intent(getBaseContext(), Child5Activity.class);
                        startActivity(child5Intent);}
                }
                return false;
        }});

答案 2 :(得分:0)

在您的setOnChildClickListener中尝试

final String selected = (String) listAdapter.getChild(groupPosition,childPosition);
Intent intent;
            switch (selected){
                case "Capital Letter":
                    intent = new 
Intent("MainActivity.this, ActivityMain2.class");
                    startActivity(intent);
                    break;
            }

答案 3 :(得分:-1)

Intent intent  = null;
         switch (groupPosition){
                case 0:
                    switch (childPosition){
                        case 0:
                            img.setImageResource(R.drawable.slika1);
                            intent  = new Intent(activity, Activity1.class);
                            break;
                        ....
                    }
                    break;       
                case 1:
                    switch (childPosition){
                        case 0:
                            img.setImageResource(R.drawable.slika2);
                            intent  = new Intent(activity, Activity2.class);
                            break;
                        ....
                    }
                    break;
            }
         convertView.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {    
                    activity.startActivity(intent);
                 }
          });