Android рдореЗрдВ рдХрд╕реНрдЯрдо рд╡рд┐рд╕реНрддрд╛рд░ рдпреЛрдЧреНрдп рд╕реВрдЪреА

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рджреЛ рд╕реНрддрд░реАрдп рд╕реВрдЪреА - рдПрдХреНрд╕рдкреЗрдВрдбреЗрдмрд▓ рд▓рд┐рд╕реНрдЯ рд╡реНрдпреВ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЖрдЦрд┐рд░ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдЫрд╡рд┐

рдЖрдЗрдП рд╢реБрд░реВ рдХрд░реЗрдВ, рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕ рдХреЛрдб рдХреЛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ

public class ExpActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //   list ExpandableListView listView = (ExpandableListView)findViewById(R.id.exListView); //     ArrayList<ArrayList<String>> groups = new ArrayList<ArrayList<String>>(); ArrayList<String> children1 = new ArrayList<String>(); ArrayList<String> children2 = new ArrayList<String>(); children1.add("Child_1"); children1.add("Child_2"); groups.add(children1); children2.add("Child_1"); children2.add("Child_2"); children2.add("Child_3"); groups.add(children2); //    context     ExpListAdapter adapter = new ExpListAdapter(getApplicationContext(), groups); listView.setAdapter(adapter); } } 


Main.xml ExpandableListView рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ExpandableListView android:id="@+id/exListView" android:layout_width="match_parent" android:layout_height="match_parent" android:indicatorLeft="250dp" android:indicatorRight="300dp" /> </LinearLayout> 


рдЕрдм рдПрдбреЗрдкреНрдЯрд░ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ

 public class ExpListAdapter extends BaseExpandableListAdapter { private ArrayList<ArrayList<String>> mGroups; private Context mContext; public ExpListAdapter (Context context,ArrayList<ArrayList<String>> groups){ mContext = context; mGroups = groups; } @Override public int getGroupCount() { return mGroups.size(); } @Override public int getChildrenCount(int groupPosition) { return mGroups.get(groupPosition).size(); } @Override public Object getGroup(int groupPosition) { return mGroups.get(groupPosition); } @Override public Object getChild(int groupPosition, int childPosition) { return mGroups.get(groupPosition).get(childPosition); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { return true; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.group_view, null); } if (isExpanded){ // -,   Group  } else{ // -,   Group  } TextView textGroup = (TextView) convertView.findViewById(R.id.textGroup); textGroup.setText("Group " + Integer.toString(groupPosition)); return convertView; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.child_view, null); } TextView textChild = (TextView) convertView.findViewById(R.id.textChild); textChild.setText(mGroups.get(groupPosition).get(childPosition)); Button button = (Button)convertView.findViewById(R.id.buttonChild); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(mContext,"button is pressed",5000).show(); } }); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } } 


рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдирд╛рдо рдХрд╛рдлреА рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рд╣реИрдВред GetGroupView рдФрд░ getChildView рддрд░реАрдХреЗ рдХреНрд░рдорд╢рдГ "рдорд╛рддрд╛-рдкрд┐рддрд╛" рдФрд░ "рдмрдЪреНрдЪреЛрдВ" рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╢реНрдп рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред GetGroupView рд╡рд┐рдзрд┐ рдореЗрдВ isExpanded рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдореВрд╣ рдкреГрд╖реНрдарднреВрдорд┐ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред LayoutInflater рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдЕрдкрдиреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред

group_view.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="match_parent"> <TextView android:id="@+id/textGroup" android:layout_width="wrap_content" android:layout_height="50dp" android:layout_marginLeft="5dp" android:layout_marginTop="20dp" android:textColor="@android:color/white" android:textStyle="bold" /> </LinearLayout> 


child_view.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="match_parent"> <TextView android:id="@+id/textChild" android:layout_width="wrap_content" android:layout_height="40dp" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:textColor="@android:color/white" /> <Button android:id="@+id/buttonChild" android:layout_width="100dp" android:layout_height="40dp" android:layout_marginLeft="150dp" android:layout_marginTop="10dp" android:text="Button" android:focusable="false" /> </LinearLayout> 


Child_view.xml рдореЗрдВ рдПрдХ рдмрдЯрди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ , рдФрд░ рдПрдбреЗрдкреНрдЯрд░ рдореЗрдВ getChildView рдореЗрдердб рд╕реЗ рдЗрд╕реЗ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЙрд╕реА рддрд░рд╣, рдЖрдк group_view.xml рдореЗрдВ рдмрдЯрди рдФрд░ рдЕрдиреНрдп рддрддреНрд╡ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ ред

рд╕реВрдЪреА рдХреЛ рд╢реНрд░реЛрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ "рддреНрд░рд┐рд╢рдВрдХреБ" рднреА рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


рдЕрдм GroupIndicator рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ - рдПрдХ рд╕рдореВрд╣ рд╕реНрдерд┐рддрд┐ рд╕рдВрдХреЗрддрдХред рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдореБрдЦреНрдп рд▓реЗрдХреНрд╕ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕реВрдЪрдХрд▓реЗрдлреНрдЯ рдФрд░ рдЗрдВрдбрд┐рдХреЗрдЯрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрд░рдорд╢рдГ рдмрд╛рдПрдБ рдФрд░ рджрд╛рдПрдБ рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рдеред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рдВрдХреЗрддрдХ рдмрд╛рдИрдВ рдУрд░ рд╕реНрдерд┐рдд рд╣реИ, рдЬреЛ рдмрд╣реБрдд рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдк рдЕрдкрдиреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рднреА рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдбреНрд░рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рдВрдХреЗрддрдХ.рдПрдХреНрд╕рдПрдордПрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_expanded="true" android:drawable="@drawable/imageOpen"> </item> <item android:state_empty="true" android:drawable="@drawable/imageClose"> </item> </selector> 


рдЬрд╣рд╛рдВ рдЫрд╡рд┐рдУрдкрди - рд╕рдореВрд╣ рдХреЗ рдЦреБрд▓реЗ рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ imageClose - рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред Main.xml рдореЗрдВ рдЖрдЧреЗ рдЖрдкрдХреЛ рд╣рдорд╛рд░реА рдПрдВрдбреНрд░реЙрдЗрдб рд╕реВрдЪреА рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ : groupIndicator = "@ drawable / рд╕реВрдЪрдХ" ред рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ group_view рд▓реЗрдЖрдЙрдЯ рдХреА рдкреВрд░реА рдКрдВрдЪрд╛рдИ рддрдХ рдлреИрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЛ рдХрд╕реНрдЯрдо рд╕рдВрдХреЗрддрдХ рдЖрдЗрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдЧреЗрдЯрд╡реЗ рд╡рд┐рдзрд┐ рдореЗрдВ рдЙрдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдПрдбреЗрдкреНрдЯрд░ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореИрдВ ViewHolder рд╡рд░реНрдЧ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЦреИрд░, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкреЛрд╕реНрдЯ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдорджрдж рдХрд░реЗрдЧреАред

Source: https://habr.com/ru/post/In147546/


All Articles