2016-04-18 2 views
1

Я создаю приложение в андроидских студиях, которое требует от пользователя выбрать дочерний элемент из расширяемого списка в одном действии и для его отображения в другом действии. Я новичок в java и андроид-студиях и до сих пор не понимаю, как это сделать. Если у кого-нибудь есть образец кода или он может помочь, это будет здорово, спасибо!Расширяемый ListView OnClickListeners

ответ

0

Вы должны использовать метод setOnChildClickListener из класса ExpandableListView для создания ClickListener для элементов списка, а затем использовать Intent для открытия нового действия. Вызов для установки слушателя должен быть установлен после того, как вы установите адаптер для ListView. Here есть учебник по использованию ExpandableListView, и он показывает, как установить ClickListener для элементов. И here есть документация разработчика Android, в которой показано, как создать и открыть новое действие нажатием кнопки.

+0

Когда что-то выбирается на ListView, мне нужно, чтобы отобразить это значение в другой ListView, вы какие-либо учебные пособия по этому поводу? – IonaMc

+0

Нет, это не обычный случай использования, поэтому я не думаю, что смогу найти пример для этого. Являются ли два ListViews одинаковыми? Или вы пытаетесь отправить элемент из первого ListView во второй ListView внутри другого действия? Если это так, вы можете отправить элемент через дополнительный элемент Intent, который можно увидеть в документации, на которую я ссылался ранее. И, пожалуйста, повторите предыдущий ответ, если это было полезно, и задайте его как ответ, если он решит вашу проблему, поскольку это может помочь другим людям с одинаковой проблемой. –

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.--> 
+0

_Пожалуйста, включите некоторое описание, почему этот код помогает OP. У вас также есть большие куски, прокомментированные, которые, как я полагаю, не нужны, - плюс, похоже, у вас тоже есть проблемы с форматированием. Прочитайте [ответ] - он будет содержать полезные советы для вас. – Tom

Смежные вопросы