2016-04-18 14 views
1

私はアンドロイドスタジオで、あるアクティビティの展開可能なリストビューから子アイテムを選択し、それを別のアクティビティに表示する必要のあるアプリケーションを作成しています。私はJavaとAndroidのスタジオには新しく、これを実際に行う方法をまだ理解していません。誰かがサンプルコードを持っているか、それがすばらしいと助けてくれるなら、ありがとう!Expandable Listview OnClickListeners

答えて

0

ExpandableListViewクラスのsetOnChildClickListenerメソッドを使用して、リスト要素のClickListenerを作成し、次にインテントを使用して新しいアクティビティを開く必要があります。リスナーを設定する呼び出しは、ListViewのアダプターを設定した後に設定する必要があります。 Here ExpandableListViewを使用するためのチュートリアルがあり、要素のClickListenerを設定する方法が示されています。 hereボタンのクリックから新しいアクティビティを作成して開く方法を示すAndroid開発者のドキュメントがあります。

+0

何かがリストビューで選択されて、私はあなたはその上の任意のチュートリアル、別のリストビューにその値を表示するようにしている必要がありますか? – IonaMc

+0

いいえ、それは一般的な使用例ではないので、私はそれの例を見つけることができるとは思わない。 2つのListViewは同じアクティビティにありますか?または、最初のListViewから別のアクティビティ内の2番目の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

_Please_このコードがOPに役立つ理由についての説明。あなたは、私が必要としていないと思われる大きな塊をコメントアウトしました。また、フォーマット上の問題もあるようです。 [答え]を読んでください - それはあなたのためのいくつかの便利なヒントが含まれます。 – Tom

関連する問題