可扩展的Listview OnClickListeners

时间:2016-04-18 02:32:58

标签: java android android-studio expandablelistview

我正在Android工作室中创建一个应用程序,要求用户从一个活动的可扩展列表视图中选择一个子项,并将其显示在另一个活动上。我是java和android工作室的新手,但仍然不明白如何做到这一点。如果有人有任何示例代码或可以帮助那将是伟大的,谢谢!

2 个答案:

答案 0 :(得分:0)

您应该使用ExpandableListView类中的setOnChildClickListener方法为列表元素创建ClickListener,然后使用Intent打开新活动。在为ListView设置适配器后,应设置设置侦听器的调用。  Here有一个使用ExpandableListView的教程,它展示了如何为元素设置ClickListener。 而且here还有Android开发人员的文档,其中显示了如何通过按钮的点击创建和打开新活动。

答案 1 :(得分:0)

**You should use the setOnChildClickListener method from the ExpandableListView class to create a ClickListener for the list elements and then use a Intent to open the new activity. The call to set the listener should be set after you've set the adapter for the ListView and create the xml file for child and parent.child will be Expandable TextView **

                      **layout file**

                    <?xml version="1.0" encoding="utf-8"?>
                <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    xmlns:tools="http://schemas.android.com/tools"
                    android:id="@+id/activity_main"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:paddingBottom="@dimen/activity_vertical_margin"
                    android:paddingLeft="@dimen/activity_horizontal_margin"
                    android:paddingRight="@dimen/activity_horizontal_margin"
                    android:paddingTop="@dimen/activity_vertical_margin"
                    tools:context="com.example.elite_android.explistview1.MainActivity">



                    <RelativeLayout
                        android:id="@+id/main_number_picker_layout"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_alignParentTop="true"
                        android:layout_marginTop="17dp">

                        <NumberPicker
                            android:id="@+id/main_number_picker"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignParentRight="true"
                            android:text="Next" />

                        <TextView
                            android:id="@+id/main_txt_patient_count"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_centerVertical="true"
                            android:layout_toLeftOf="@id/main_number_picker"
                            android:text="Select number of patient"
                            android:textColor="@color/colorAccent"
                            android:layout_marginLeft="80dp"/>


                    </RelativeLayout>


                    <ExpandableListView
                        android:id="@+id/exp_Listview"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_below="@id/main_number_picker_layout">

                    </ExpandableListView>


                </RelativeLayout>


            **Main Activity.java file**

                package com.example.elite_android.explistview1;

            import android.content.Context;
            import android.support.v7.app.AppCompatActivity;
            import android.os.Bundle;
            import android.util.Log;
            import android.view.Menu;
            import android.view.View;
            import android.view.inputmethod.InputMethodManager;
            import android.widget.EditText;
            import android.widget.ExpandableListView;
            import android.view.View.OnFocusChangeListener;

            import java.util.ArrayList;
            import java.util.HashMap;
            import java.util.List;

            import android.widget.ExpandableListAdapter;
            import android.widget.ExpandableListView.OnChildClickListener;
            import android.widget.ListView;
            import android.widget.NumberPicker;
            import android.widget.TextView;
            import android.widget.Toast;
            import android.widget.NumberPicker;

            public class MainActivity extends AppCompatActivity {
                ExpandableListView expandableListView;

                private MyAdapter mAdapter;
                ExpandableListView expand;
                NumberPicker numberPicker;

                private List<String> headerItems;
                private ArrayList childDetails;
                private HashMap<String, List<String>> childList;
                private Context ctx;

                EditText editText1;

                @Override
                protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);

            //        get reference to the EditText
                    editText1 = (EditText) findViewById(R.id.child_item);
            //        //set the onFocusChange listener
            //        // editText1.setOnFocusChangeListener(editText1.getOnFocusChangeListener());
            //
            ////        //get reference to EditText
            ////        editText2 = (EditText) findViewById(R.id.sequence);
            ////        // set the on focusChange listner
            ////        editText2.setOnFocusChangeListener(editText2.getOnFocusChangeListener());
            //
            //        //Generate list View from ArrayList;
            //
            //
            //        EditText editText = (EditText) findViewById(R.id.child_item);
            //        editText.requestFocus();
            //        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            //        imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
            //
            //
            ////        editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            //        //          @Override
            //        //        public void onFocusChange(View v, boolean hasFocus) {
            //        //          //editText.setOnFocusChangeListener();
            //        //        return;
            //        //  }
            //        //});
            //

                    String[] numbers = new String[10];
                    for (int count = 0; count < 10; count++)
                        numbers[count] = String.valueOf(count);

                    numberPicker = (NumberPicker) findViewById(R.id.main_number_picker);
                    numberPicker.setMaxValue(numbers.length);
                    numberPicker.setMinValue(1);
                    numberPicker.setDisplayedValues(numbers);

                    numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
                        @Override
                        public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
                            generateListItems(newVal);
                            loadRecycleView();


                        }
                    });
                }

                private void generateListItems(int childCount) {
                    if (headerItems != null)
                        headerItems.clear();
                    else
                        headerItems = new ArrayList<>();

                    if (childList != null)
                        childList.clear();
                    else
                        childList = new HashMap();

                    if (childDetails == null) {
                        childDetails = new ArrayList();
                        childDetails.add("Name");
                        childDetails.add("Age");
                        childDetails.add("Gender");
                    }

                    // Put header items
                    for (int count = 0; count < childCount; count++) {
                        headerItems.add(" Parent " + count);
                        childList.put(headerItems.get(count), childDetails);
                    }
                }

                private void loadRecycleView() {
                    if (expandableListView == null) {
                        expandableListView = (ExpandableListView) findViewById(R.id.exp_Listview);
                        mAdapter = new MyAdapter(this, headerItems, childList);
                        expandableListView.setAdapter(mAdapter);
                    } else {
                        expandableListView.invalidate();
                        mAdapter.setHeaderData(headerItems);
                        mAdapter.setListData(childList);
                        mAdapter.notifyDataSetChanged();
                    }
                }


                @Override
                public boolean onCreateOptionsMenu(Menu menu) {
                    getMenuInflater().inflate(R.menu.menu, menu);
                    return true;
                }

            }


        **Adapter class.java**

            package com.example.elite_android.explistview1;

        import android.content.Context;
        import android.graphics.Color;
        import android.util.Log;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;
        import android.view.inputmethod.InputMethodManager;
        import android.widget.BaseExpandableListAdapter;
        import android.widget.ExpandableListView;
        import android.widget.NumberPicker;
        import android.widget.TextView;
        import android.widget.EditText;
        import java.util.ArrayList;
        import java.util.HashMap;
        import java.util.List;
        import android.view.View.OnFocusChangeListener;

        /**
         * Created by ELITE-ANDROID on 28-02-2017.
         */
        // this is provides all needs methods  implementing an Expandable List VIew

        public class MyAdapter extends BaseExpandableListAdapter {

            // We need some Variables here so therer are some Variables here


            private List<String> header_titles;                     // This is for Representing the HeadLine(Array list)
            private HashMap<String, List<String>> child_titles;     //  defin the HashMap for the child item how to Represent the Parent Handing so Hash Map, need some Variables
            private Context ctx;
            private NumberPicker numberPicker;
            EditText editText;
            View view;
            private static LayoutInflater inflater = null;

            //for  initalized for all Variables we need some Constructor
            public MyAdapter(Context context, List<String> header_titles, HashMap<String, List<String>> child_titles) {

                super();
                this.ctx = context;
                this.child_titles = child_titles;
                this.header_titles = header_titles;


            }

            public void refreshHeader_titles(List<String> events) {
                this.header_titles.clear();
                this.header_titles.addAll(header_titles);
                notifyDataSetChanged();
            }

            ;


            @Override
            // From this Override  method How to Return how many elements are the Group count like parent
            public int getGroupCount() {
                return header_titles.size();
            }


            @Override
            //here  the number of child items are in each heading. There are three Heading - PAtien Name ,Age, Gender
            public int getChildrenCount(int groupPosition) {

        //        Log.d("xxx", )
                return child_titles.get(header_titles.get(groupPosition)).size(); //how to Return the size of HashMap

            }


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

            @Override
            // here how to retuen child items on the particular headings and Positions.
            public Object getChild(int groupPosition, int childPosition) {
                return child_titles.get(header_titles.get(groupPosition)).get(childPosition);
            }

            @Override
            //return the groupo position
            public long getGroupId(int groupPosition) {
                return groupPosition;
            }

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

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


            @Override
            // Here return the Group View
            public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {


        //        ListViewHolder viewHolder;
        //        if (view == null) {
        //            viewHolder = new ListViewHolder();
        //            LayoutInflater inflater = context.getLayoutInflater();
        //            view = inflater.inflate(R.layout.listitems, null, true);
        //            viewHolder.itmName = (TextView) view.findViewById(R.id.Item_name);
        //            viewHolder.itmPrice = (EditText) view.findViewById(R.id.Item_price);
        //            view.setTag(viewHolder);
        //        } else {
        //            viewHolder = (ListViewHolder) view.getTag();
        //// loadSavedValues();
        //        }


                // Here how to get the Heading Title here Decalered String Variables, now how to get title of heading from getGroup methods so simple call Backed Methods.
                String title = (String) this.getGroup(groupPosition);
                if (convertView == null) {
                    LayoutInflater layoutInflater = (LayoutInflater) this.ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    convertView = layoutInflater.inflate(R.layout.prent, null);
                }
                TextView textView = (TextView) convertView.findViewById(R.id.heading_item);
                textView.setText(title);     //  for Heading bold style ,title
                return convertView;
            }

            @Override
            public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
                String title = (String) this.getChild(groupPosition, childPosition);
                if (convertView == null) {
                    LayoutInflater infalInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    convertView = infalInflater.inflate(R.layout.child, null);
                }

                String cellData = child_titles.get(header_titles.get(groupPosition)).get(childPosition);

                EditText childItem = (EditText) convertView.findViewById(R.id.child_item);
                childItem.setHint(cellData);


                childItem.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                    @Override
                    public void onFocusChange(View v, boolean hasFocus) {
                       // Log.d("xxxx", "Has focus " + hasFocus);
                        if (!hasFocus) {
        //                    int itemIndex = View.getId();
        //                    String enteredName = ((EditText)v).getText().toString();
        //                    selttems.put(itemIndex, enteredName);

                        } else {

                        }

                        return;
                    }
                });

                return convertView;
            }


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

            public void setListData(HashMap<String, List<String>> lData) {
                child_titles = lData;
            }

            public void setHeaderData(List<String> hData) {
                header_titles = hData;
            }
        }


    **child.Xml file**

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






        <EditText
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/child_item"
            android:textSize="25dp"
            android:textStyle="bold"
            android:gravity="center_vertical"


            android:layout_marginLeft="10dp"/>

        <!--<EditText-->
            <!--android:id="@+id/sequence"-->
            <!--android:layout_width="wrap_content"-->
            <!--android:layout_height="wrap_content"-->
            <!--android:layout_alignParentLeft="true"-->
            <!--android:layout_alignParentTop="true"-->
            <!--android:paddingLeft="35sp"-->
            <!--android:layout_marginRight="10dp"-->
            <!--android:textAppearance="?android:attr/textAppearanceMedium" />-->

    </LinearLayout>


    <!--This Layout File Represent the Child Items.
    This Field Represent the Child Item IN the List VIew -->



**parent.Xml**

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="vertical">

    <TextView
        android:id="@+id/heading_item"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="10dp"
        android:gravity="center_vertical"
        android:textColor="@color/colorAccent"
        android:textSize="25dp" />

</LinearLayout>




    <!--This Layout file for Heading -Lines.-->