#android #expandablelistview
#Android #расширяемый список
Вопрос:
Привет, в приведенном ниже коде я настроил свой расширяемый список. мой вид, как изображение, заголовок заголовка, стрелка вправо.
Если щелкнуть расширенный элемент моего списка в то время, когда нужно изменить стрелку вправо на стрелку вниз.
Но как этого добиться, может ли кто-нибудь мне помочь
listheader.java:
<?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"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="20dp"
android:id="@ id/listheadermain"
android:orientation="horizontal">
<ImageView
android:id="@ id/iconimage"
android:layout_width="30dp"
android:layout_height="50dp"
android:paddingBottom="5dp"
android:paddingLeft="5dp"
app:tint="@color/theme"
android:paddingTop="5dp" />
<TextView
android:id="@ id/submenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/theme"
android:fontFamily="@font/robotoregular"
android:paddingLeft="5dp"
android:layout_weight="1"
android:paddingTop="15dp"
android:textSize="12sp"/>
<ImageView
android:id="@ id/right_arrow"
android:layout_width="40dp"
android:layout_height="40dp"
android:padding="5dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:src="@drawable/arrow_right"
app:tint="@color/theme" />
</LinearLayout>
</LinearLayout>
ExpandableListAdapter.java:
public class ExpandableListAdapter extends BaseExpandableListAdapter {
private Context mContext;
private List<ExpandedMenuModel> mListDataHeader; // header titles
// child data in format of header title, child title
private HashMap<ExpandedMenuModel, List<String>> mListDataChild;
ExpandableListView expandList;
public ExpandableListAdapter(Context context, List<ExpandedMenuModel> listDataHeader, HashMap<ExpandedMenuModel, List<String>> listChildData, ExpandableListView mView) {
this.mContext = context;
this.mListDataHeader = listDataHeader;
this.mListDataChild = listChildData;
this.expandList = mView;
}
@Override
public int getGroupCount() {
int i = mListDataHeader.size();
Log.d("GROUPCOUNT", String.valueOf(i));
return this.mListDataHeader.size();
}
@Override
public int getChildrenCount(int groupPosition) {
int childCount = 0;
if (groupPosition != 8) {
childCount = this.mListDataChild.get(this.mListDataHeader.get(groupPosition)).size();
}
return childCount;
}
@Override
public Object getGroup(int groupPosition) {
return this.mListDataHeader.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
Log.d("CHILD", mListDataChild.get(this.mListDataHeader.get(groupPosition))
.get(childPosition).toString());
return this.mListDataChild.get(this.mListDataHeader.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 false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
ExpandedMenuModel headerTitle = (ExpandedMenuModel) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this.mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.listheader, null);
}
TextView lblListHeader = (TextView) convertView
.findViewById(R.id.submenu);
ImageView headerIcon = (ImageView) convertView.findViewById(R.id.iconimage);
final ImageView rightarrowIcon=(ImageView) convertView.findViewById(R.id.right_arrow);
final LinearLayout listheadermain=(LinearLayout)convertView.findViewById(R.id.listheadermain);
lblListHeader.setTypeface(null, Typeface.BOLD);
lblListHeader.setText(headerTitle.getIconName());
headerIcon.setImageResource(headerTitle.getIconImg());
rightarrowIcon.setImageResource(R.drawable.arrow_right);
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
final String childText = (String) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this.mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_submenu, null);
}
TextView txtListChild = (TextView) convertView
.findViewById(R.id.submenu);
txtListChild.setText(childText);
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
MainActivity.java:
private void prepareListData() {
listDataHeader = new ArrayList<ExpandedMenuModel>( );
listDataChild = new HashMap<ExpandedMenuModel, List<String>>( );
ExpandedMenuModel item0 = new ExpandedMenuModel ( );
item0.setIconName ("Home");
item0.setIconImg (R.drawable.ic_round_dashboard_24);
listDataHeader.add (item0);
List<String> heading0 = new ArrayList<String>( );
ExpandedMenuModel item1 = new ExpandedMenuModel ( );
item1.setIconName ("My Account");
item1.setIconImg (R.drawable.ic_account_circle_black_24dp);
listDataHeader.add (item1);
List<String> heading1 = new ArrayList<String>( );
heading1.add("My Profile");
heading1.add("My Family");
heading1.add("My Consultation History");
heading1.add("My Health Records");
ExpandedMenuModel item2 = new ExpandedMenuModel ( );
item2.setIconName ("COVID19");
item2.setIconImg (R.drawable.ic_baseline_coronavirus_24);
// Adding data header
listDataHeader.add (item2);
List<String> heading2 = new ArrayList<String>( );
ExpandedMenuModel item3 = new ExpandedMenuModel ( );
item3.setIconName ("Appointments");
item3.setIconImg (R.drawable.ic_baseline_library_books_24);
// Adding data header
listDataHeader.add (item3);
List<String> heading3 = new ArrayList<String>( );
heading3.add ("Book Appointment");
heading3.add ("My Appointments");
heading3.add ("Terms amp; conditions");
heading3.add ("Privacy Policy");
ExpandedMenuModel item4 = new ExpandedMenuModel ( );
item4.setIconName ("Speciality");
item4.setIconImg (R.drawable.ic_account_circle_black_24dp);
listDataHeader.add (item4);
List<String> heading4 = new ArrayList<String>( );
ExpandedMenuModel item5 = new ExpandedMenuModel ( );
item5.setIconName ("Hospitals/Clinics");
item5.setIconImg (R.drawable.ic_round_local_hospital_24);
listDataHeader.add (item5);
List<String> heading5 = new ArrayList<String>( );
ExpandedMenuModel item6 = new ExpandedMenuModel ( );
item6.setIconName ("Logout");
item6.setIconImg (R.drawable.ic_launcher);
listDataHeader.add (item6);
List<String> heading6 = new ArrayList<String>( );
listDataChild.put (listDataHeader.get (0), heading0);
listDataChild.put (listDataHeader.get (1), heading1);
listDataChild.put (listDataHeader.get (2), heading2);// Header, Child data
listDataChild.put (listDataHeader.get (3), heading3);
listDataChild.put (listDataHeader.get (4), heading4);
listDataChild.put (listDataHeader.get (5), heading5);
listDataChild.put (listDataHeader.get (6), heading6);
}
Ответ №1:
Я получил решение
if(isExpanded){
rightarrowIcon.setImageResource(R.drawable.arrow_down);
}else {
rightarrowIcon.setImageResource(R.drawable.arrow_right);
}