Java 如何在Android中使用可扩展listview的childclicklistner?

Java 如何在Android中使用可扩展listview的childclicklistner?,java,android,expandablelistadapter,Java,Android,Expandablelistadapter,我在ExpandableListView中添加了一些文本和按钮,并在ExpandableListView中检索了SQLite数据。我想调用另一个添加到Expandablelistview上的活动 这是我的活动课 public class My_Project extends ExpandableListActivity { ExpandableListView expListView; Button btnNewProject; Button btn_myprojec

我在ExpandableListView中添加了一些文本和按钮,并在ExpandableListView中检索了SQLite数据。我想调用另一个添加到Expandablelistview上的活动

这是我的活动课

public class My_Project extends ExpandableListActivity 
{

    ExpandableListView expListView;
    Button btnNewProject;
    Button btn_myprojectdefinemyteam;

    DBHelper databaseHelper;
    SQLiteDatabase db;
    ImageView imgButtonBack;

    List dispDataList;
     String[] array;

    String[] Task_Title_Size;
    String[] Task_Start_Date_Size;
    String[] Task_CompletionDate_Size;
    String[] Task_CompletionTime_Size;
    String[] Task_Description_Size;
    String[] Task_Status_Size;
    String[] Task_IsActive_Size;


    String[] dtrProjectNAmeSize;

    public static final String Task_Title = "Task_Titles";
    public static final String Task_Start_Date = "start_date";
    public static final String Task_CompletionDate = "completion_date";
    public static final String Task_CompletionTime = "completion_time";
    public static final String Task_Description = "task_description";
    public static final String Task_Status = "task_status";
    public static final String Task_IsActive ="IS_Active";



    private int ChildClickStatus=-1;
    ExpandableListAdapter mAdapter;

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_project);

        imgButtonBack = (ImageView)findViewById(R.id.imagBackButton);//ImageView imgButtonBack;
        imgButtonBack.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent iBack = new Intent(My_Project.this , Menu.class);
                startActivity(iBack);
                finish();
            }
        });


        expListView = (ExpandableListView) findViewById(android.R.id.list);

        databaseHelper = new DBHelper(getApplicationContext());
        dispDataList=databaseHelper.viewMyProjectDetals();
        dtrProjectNAmeSize=new String[dispDataList.size()];
        System.out.println(" dtrProjectNAmeSize = " + dtrProjectNAmeSize);

    if ( dispDataList.size() > 6 )
        {
        Task_Title_Size=(String[])dispDataList.get(0);
        Task_Start_Date_Size=(String[]) dispDataList.get(1);
        Task_CompletionDate_Size = (String[])dispDataList.get(2);
        Task_CompletionTime_Size=(String[])dispDataList.get(3);
        Task_Description_Size=(String[]) dispDataList.get(4);
        Task_Status_Size = (String[])dispDataList.get(5);
        Task_IsActive_Size = (String[])dispDataList.get(6);

            for(int i=0;i<Task_Title_Size.length;i++)
            {
                System.out.println("New data :"+Task_Title_Size[i]);
            }


                List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();
                List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>();

                for (int i = 0; i < Task_Title_Size.length ; i++)
                {
                    Map<String, String> curGroupMap = new HashMap<String, String>();
                    groupData.add(curGroupMap);
                    curGroupMap.put(Task_Title,"" +Task_Title_Size[i]);

                    List<Map<String, String>> children = new ArrayList<Map<String, String>>();

                        Map<String, String> curChildMap = new HashMap<String, String>();
                        children.add(curChildMap);

                        curChildMap.put(Task_Start_Date,"" +Task_Start_Date_Size[i]);
                        curChildMap.put(Task_CompletionDate,"" +Task_CompletionDate_Size[i]);
                        curChildMap.put(Task_CompletionTime,"" +Task_CompletionTime_Size[i]);
                        curChildMap.put(Task_Description,"" +Task_Description_Size[i]);
                        curChildMap.put(Task_Status,"" +Task_Status_Size[i]);
                        curChildMap.put(Task_IsActive,"" +Task_IsActive_Size[i]);



                  childData.add(children);
                }


                mAdapter =new SimpleExpandableListAdapter(
                         this,
                         groupData,
                         R.layout.list_group,
                         new String[] { Task_Title },
                         new int[] {R.id.lblListHeader },
                         childData,
                         R.layout.child_item,
                         new String[] { Task_Start_Date , Task_CompletionDate , Task_CompletionTime , Task_Description , Task_Status , Task_IsActive},
                         new int[] { R.id.TextView_Projectdetails , R.id.textOne , R.id.textTwo , R.id.textThree , R.id.textFour, R.id.textFive}
                         );

                    expListView.setAdapter(mAdapter);  
                }  

    expListView.setOnGroupClickListener(new OnGroupClickListener()
    {
    @Override
        public boolean onGroupClick(ExpandableListView parent, View v,
                int groupPosition, long id) 
        {
            return false;
        }
    });


    //editTextTaskName = (EditText)findViewById(R.id.Task_Name);
    expListView.setOnGroupExpandListener(new OnGroupExpandListener() {

        @Override
        public void onGroupExpand(int groupPosition) {
            Toast.makeText(getApplicationContext(),
                    dtrProjectNAmeSize.length + " Expanded",
                    Toast.LENGTH_SHORT).show();
        }
    });


    expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {

        @Override
        public void onGroupCollapse(int groupPosition) {
            Toast.makeText(getApplicationContext(),
                    dtrProjectNAmeSize.length + " Collapsed",
                    Toast.LENGTH_SHORT).show();
        }
    });

    expListView.setOnChildClickListener(new OnChildClickListener() {

        @Override
        public boolean onChildClick(ExpandableListView parent, View v,
                int groupPosition, int childPosition, long id) {
            // TODO Auto-generated method stub

            final String selectedExpChild = (String) mAdapter.getChild(
                    groupPosition, childPosition);
            System.out.println(" selectedExpChild = " + selectedExpChild);
            Toast.makeText(getApplicationContext(), childPosition+"Clicked", Toast.LENGTH_LONG).show();
            return true;
        }
    });


              btnNewProject = (Button)findViewById(R.id.buttonmyproject_NewProject);
                btnNewProject.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent i = new Intent(My_Project.this , Add_Project.class);
                        startActivity(i);
                        finish();
                    }
                });


                btn_myprojectdefinemyteam = (Button)findViewById(R.id.buttonmyprojectdefinemyteam);
                btn_myprojectdefinemyteam.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent i =  new Intent(My_Project.this , Team_Member.class);
                        startActivity(i);
                        finish();

                    }
                });
            }

private class Myexpandable_ListAdapter extends BaseExpandableListAdapter {


    private Context _context;
    private List<String > _listDataHeader; // header titles
    //List<Map<String, String>> groupData;


    // child data in format of header title, child title
    private HashMap<String, List<String>> _listDataChild;
    Context context;

    public Myexpandable_ListAdapter(My_Project my_Project,
            List<Map<String, String>> groupData, int listGroup,
            String[] strings, int[] is,
            List<List<Map<String, String>>> childData, int childItem,
            String[] strings2, int[] is2) {
        // TODO Auto-generated constructor stub


    }


    public Object getChild(int groupPosition, int childPosition) 
    {
        //this.get(groupPosition).getChildren().get(childPosition);
        String strchildPosition = this._listDataChild.get(this._listDataHeader.get(groupPosition)).get(childPosition);
        System.out.println("Child Position  =" + strchildPosition);
        return this._listDataChild.get(this._listDataHeader.get(groupPosition))
                .get(childPosition);
    }

    //Call when child row clicked
    @Override
    public long getChildId(int groupPosition, int childPosition)
    {
       //****** When Child row clicked then this function call *******//*

        //Log.i("Noise", "parent == "+groupPosition+"=  child : =="+childPosition);
        if( ChildClickStatus!=childPosition)
        {
           ChildClickStatus = childPosition;

           Toast.makeText(getApplicationContext(), "Parent :"+groupPosition + " Child :"+childPosition , 
                    Toast.LENGTH_LONG).show();
        }  

        return childPosition;
    }



    public View getChildView1(int groupPosition, final int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {
                return parent;

    }

    @Override
    public View getChildView(int groupPosition, final int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {

        final String childText = (String) getChild(groupPosition, childPosition);

        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.child_item, null);
        }

        TextView txtListChild = (TextView) convertView.findViewById(R.id.TextView_Projectdetails);
        TextView txtOneListChild = (TextView)convertView.findViewById(R.id.textOne);
        TextView txtTwoListChild = (TextView)convertView.findViewById(R.id.textTwo);
        TextView txtThreeListChild = (TextView)convertView.findViewById(R.id.textThree);
        TextView txtFourListChild = (TextView)convertView.findViewById(R.id.textFour);
        TextView txtFiveListChild = (TextView)convertView.findViewById(R.id.textFive);




         txtListChild.setText(childText);
         txtOneListChild.setText(childText);
         txtTwoListChild.setText(childText);
         txtThreeListChild.setText(childText);
         txtFourListChild.setText(childText);
         txtFiveListChild.setText(childText);

         convertView.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Intent i = new Intent(My_Project.this ,Assign_Task.class);
                    startActivity(i);
                    finish();
                }
            });


        Button btnAssgnTask = (Button)convertView.findViewById(R.id.button_EditedTask);
        btnAssgnTask.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

            }
        });
        Button btnViewTask = (Button)convertView.findViewById(R.id.buttonViewTask);
        btnViewTask.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

            }
        });

        return convertView;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return this._listDataChild.get(this._listDataHeader.get(groupPosition))
                .size();
    }

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

    @Override
    public int getGroupCount() {
        return _listDataHeader.size() ;//groupData.size(); 
    }

    /**06-21 11:34:03.903: E/AndroidRuntime(544): Caused by: java.lang.NullPointerException
06-21 11:34:03.903: E/AndroidRuntime(544):  at com.sentaca.android.accordion.My_Project$Myexpandable_ListAdapter.getGroupCount(My_Project.java:330)
06-21 11:34:03.903: E/AndroidRuntime(544):  at android.widget.ExpandableListConnector.getCount(ExpandableListConnector.java:396)
06-21 11:34:03.903: E/AndroidRuntime(544):  at android.widget.ListView.setAdapter(ListView.java:454)
06-21 11:34:03.903: E/AndroidRuntime(544):  at android.widget.ExpandableListView.setAdapter(ExpandableListView.java:475)
06-21 11:34:03.903: E/AndroidRuntime(544):  at com.sentaca.android.accordion.My_Project.onCreate(My_Project.java:146)
**/
    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
        String headerTitle = (String) getGroup(groupPosition);
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_group, null);
        }

        TextView lblListHeader = (TextView) convertView
                .findViewById(R.id.lblListHeader);
        lblListHeader.setTypeface(null, Typeface.BOLD);
        lblListHeader.setText(headerTitle);

        return convertView;
    }

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

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

}


}

My Error log cat


06-21 12:43:21.564: I/System.out(897): str_Task_Titles     :Task One
06-21 12:43:21.564: I/System.out(897): str_start_date      :20-06-2014
06-21 12:43:21.564: I/System.out(897): str_completion_date      :6-20-2014
06-21 12:43:21.564: I/System.out(897): str_completion_time     :17-30
06-21 12:43:21.564: I/System.out(897): str_task_description      :Fill The Form
06-21 12:43:21.564: I/System.out(897): str_task_status      :Pending
06-21 12:43:21.574: I/System.out(897): str_IS_Active     :YES
06-21 12:43:21.596: I/System.out(897):  dtrProjectNAmeSize = [Ljava.lang.String;@40526c28
06-21 12:43:21.596: I/System.out(897): New data :Task One
06-21 12:43:27.654: D/AndroidRuntime(897): Shutting down VM
06-21 12:43:27.654: W/dalvikvm(897): threadid=1: thread exiting with uncaught exception (group=0x40015560)
06-21 12:43:27.707: E/AndroidRuntime(897): FATAL EXCEPTION: main
06-21 12:43:27.707: E/AndroidRuntime(897): java.lang.ClassCastException: java.util.HashMap
06-21 12:43:27.707: E/AndroidRuntime(897):  at com.sentaca.android.accordion.My_Project$5.onChildClick(My_Project.java:192)
06-21 12:43:27.707: E/AndroidRuntime(897):  at android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:588)
06-21 12:43:27.707: E/AndroidRuntime(897):  at android.widget.ExpandableListView.performItemClick(ExpandableListView.java:527)
06-21 12:43:27.707: E/AndroidRuntime(897):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
06-21 12:43:27.707: E/AndroidRuntime(897):  at android.os.Handler.handleCallback(Handler.java:587)
06-21 12:43:27.707: E/AndroidRuntime(897):  at android.os.Handler.dispatchMessage(Handler.java:92)
06-21 12:43:27.707: E/AndroidRuntime(897):  at android.os.Looper.loop(Looper.java:123)
06-21 12:43:27.707: E/AndroidRuntime(897):  at android.app.ActivityThread.main(ActivityThread.java:3683)
06-21 12:43:27.707: E/AndroidRuntime(897):  at java.lang.reflect.Method.invokeNative(Native Method)
06-21 12:43:27.707: E/AndroidRuntime(897):  at java.lang.reflect.Method.invoke(Method.java:507)
06-21 12:43:27.707: E/AndroidRuntime(897):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-21 12:43:27.707: E/AndroidRuntime(897):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-21 12:43:27.707: E/AndroidRuntime(897):  at dalvik.system.NativeStart.main(Native Method)
谢谢。

在My_项目中。java:141,替换:

String[] array = new String[] { Task_Start_Date , Task_CompletionDate , Task_CompletionTime , Task_Description , Task_Status , Task_IsActive};
与:


删除我建议的以前的更改,即仅使用上述更改保留所有与以前相同的代码。

我已使用您的代码行进行编辑,我使用SimpleExpandableListAdapter获得classCastException错误,并使用此行指示错误=new int[]{R.id.TextView_Projectdetails,R.id.textOne,R.id.text2,R.id.textThree,R.id.textFour,R.id.textFive}对不起……你能告诉我My_Project行的代码吗,嘿,这有用吗?你还有问题吗?是的,还没有解决。我还在努力。你从哪里得到这个?
String[][] array = new String[][] { Task_Start_Date , Task_CompletionDate , Task_CompletionTime , Task_Description , Task_Status , Task_IsActive};