Java 如何在Android的Expandablelistview中处理子点击事件?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/24242694/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-14 11:02:35  来源:igfitidea点击:

How to handle child click event in Expandablelistview in Android?

javaandroidexpandablelistview

提问by tazeenmulani

I'm creating expandable list view in Android. I have add three textview in relative layout and two buttons in horizontal linear layout means this two buttons are added in one row, so how can I fire click event on those two buttons?

我正在 Android 中创建可扩展的列表视图。我在相对布局中添加了三个文本视图,在水平线性布局中添加了两个按钮意味着这两个按钮添加在一行中,那么如何在这两个按钮上触发点击事件?

And I want to call another activity on button click in expandable list view. But I did not find any idea how to click on child in ExpandableListView.

我想在可扩展列表视图中点击按钮时调用另一个活动。但我没有找到任何想法如何在ExpandableListView.

Here is my XML file.

这是我的 XML 文件。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/white"
    android:padding="2dp" >

    <TextView
        android:id="@+id/TextView_Projectdetails"
        android:layout_width="match_parent"
        android:layout_height="25dp"
        android:background="@drawable/button_shape"
        android:paddingLeft="10sp"
        android:textColor="@android:color/black" />

    <TextView
        android:id="@+id/textOne"
        android:layout_width="match_parent"
        android:layout_height="25dp"
        android:layout_below="@+id/TextView_Projectdetails"
        android:layout_marginTop="2dp"
        android:background="@drawable/button_shape"
        android:paddingLeft="10sp"
        android:textColor="@android:color/black" >
    </TextView>

    <TextView
        android:id="@+id/textTwo"
        android:layout_width="match_parent"
        android:layout_height="25dp"
        android:layout_below="@+id/textOne"
        android:layout_marginTop="2dp"
        android:background="@drawable/button_shape"
        android:paddingLeft="10sp"
        android:textColor="@android:color/black" >
    </TextView>

    <LinearLayout
        android:id="@+id/linearlAYOUT"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textTwo"
        android:layout_marginTop="5dp"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/button_EditedTask"
            android:layout_width="0dp"
            android:layout_height="27dp"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:background="@drawable/button_shape_two"
            android:gravity="center"
            android:paddingBottom="3sp"
            android:paddingTop="3sp"
            android:text="ASSIGN TASK"
            android:focusable="false"      
            android:textColor="@android:color/white"
            android:textSize="12sp"
            android:textStyle="normal" />

        <Button
            android:id="@+id/buttonViewTask"
            android:layout_width="0dp"
            android:layout_height="27dp"
            android:layout_gravity="center_vertical|center_horizontal"
            android:layout_marginLeft="3dp"
            android:layout_weight="1"
            android:background="@drawable/button_shape_one"
            android:gravity="center"
            android:paddingBottom="3sp"
            android:paddingTop="3sp"
            android:text="VIEW TASK"
            android:focusable="false"      
            android:textColor="@android:color/white"
            android:textSize="12sp"
            android:textStyle="normal" />
    </LinearLayout>

</RelativeLayout>

List_Group xml file -

List_Group xml 文件 -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="8dp" 
    android:background="#000000">


    <TextView
        android:id="@+id/lblListHeader"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
        android:textSize="17dp"
        android:textColor="#f9f93d" />

</LinearLayout>

here is my ExpandableListAdapterclass -

这是我的ExpandableListAdapter课-

public class ExpandableListAdapter extends BaseExpandableListAdapter {

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

    public ExpandableListAdapter(Context context, List<String> listDataHeader,
            HashMap<String, List<String>> listChildData) {
        this._context = context;
        this._listDataHeader = listDataHeader;
        this._listDataChild = listChildData;
    }

    public ExpandableListAdapter
    (My_Project my_Project, List createGroupList,
            int listGroup, String[] strings, int[] is, List createChildList,
            int childItem, String[] strings2, int[] is2)
    {
        // TODO Auto-generated constructor stub
    }

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

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

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



        txtListChild.setText(childText);
        txtOneListChild.setText(childText);
        txtTwoListChild.setText(childText);




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

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //Intent i=new Intent(context,Assign_Task.class);
                //StartElementListener()

            }
        });


        Button btnViewTask = (Button)convertView.findViewById(R.id.buttonViewTask);

        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 this._listDataHeader.size();
    }

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

}

Here is my Activity code -

这是我的活动代码 -

public class My_Project extends ExpandableListActivity 
{


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

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


            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

                     int cp = (int) mAdapter.getChildId(groupPosition, childPosition);
                     if(cp == 3)
                     {
                         switch (cp)
                         {
                                case 3:



                                break;

                         }
                     }


                    return false;

                }
            });



            mAdapter = new SimpleExpandableListAdapter(
                        this,
                        groupData,
                        R.layout.list_group,
                        new String[] { Project_Name },
                        new int[] {R.id.lblListHeader },
                        childData,
                        R.layout.child_item,
                        new String[] { Project_Date_Created , Project_End_Date , Project_Is_Active},
                        new int[] { R.id.TextView_Projectdetails , R.id.textOne , R.id.textTwo }
                        );

                expListView.setAdapter(mAdapter);  

    }



    }

回答by Md Abdul Gafur

You can set setOnChildClickListener of chid of the expandable listview then can you go to the other activity according to the value of the array list that are use for create expandable listview.

您可以设置可扩展列表视图的 chid 的 setOnChildClickListener 然后您可以根据用于创建可扩展列表视图的数组列表的值转到其他活动。

            menuExpandableListView
                    .setOnChildClickListener(new ExpandableListView.OnChildClickListener() {

                        @Override
                        public boolean onChildClick(
                                ExpandableListView parent, View v,
                                int groupPosition, int childPosition,
                                long id) {
                            GoCategory(mainMenusList.get(groupPosition)
                                    .getPagesList().get(childPosition));
                            return false;
                        }
                    });

Or you can do this

或者你可以这样做

@Override
public View getChildView(final int groupPosition, final int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
    Page page =(Page) getChild(groupPosition, childPosition);
    convertView = inflater.inflate(R.layout.child_list_layout, null);
    Button button1=(Button)convertView.findViewById(R.id.button1);
     button1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

                Your code here....


        }
    });

    return convertView;
}

回答by Priyanka

What are you trying to do here-

你想在这里做什么——

expListView.setOnChildClickListener(new OnChildClickListener() {

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

                     int cp = (int) mAdapter.getChildId(groupPosition, childPosition);
                     if(cp == 3)
                     {
                         switch (cp)
                         {
                                case 3:



                                break;

                         }
                     }


                    return false;

                }
            });

This listener is using for child item click, call startActivity(intent)in this part of code.

这个监听器用于子项点击,startActivity(intent)在这部分代码中调用。