简体   繁体   中英

How to add a static row in expandablelistview

How to add this single row as static in every expandablelistview ?

在此处输入图片说明

this is my layout inflater :

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <RelativeLayout
    android:padding="5dp"
        android:layout_marginTop="20dp"
    android:layoutDirection="ltr"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">



        <TextView
            android:text="#"
            android:id="@+id/txt_rank_standings"
            android:textSize="16sp"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:text="TEAM"
            android:id="@+id/txtteam"
            android:textSize="16sp"
            android:layout_marginLeft="15dp"
            android:layout_marginStart="15dp"
            android:layout_toRightOf="@+id/txt_rank_standings"
            android:layout_toEndOf="@+id/txt_rank_standings"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="15dp"
            android:textSize="16sp"
            android:layout_marginEnd="15dp"
            android:layout_toLeftOf="@+id/txt_points_standings"
            android:layout_toStartOf="@+id/txt_points_standings"
            android:text="P" />

        <TextView
            android:id="@+id/txt_points_standings"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="15dp"
            android:textSize="16sp"
            android:layout_marginEnd="15dp"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:text="PTS" />
        <TextView
            android:id="@+id/txt_rank_standings_final"
            android:textSize="16sp"
            android:textColor="#FFFFFF"
            android:text="10"
            android:layout_marginTop="15dp"
            android:layout_below="@+id/txt_rank_standings"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/txt_name_standings_final"
            android:textSize="16sp"
            android:text="العهد"
            android:layout_below="@+id/txtteam"
            android:layout_marginTop="15dp"
            android:layout_toEndOf="@+id/txt_rank_standings_final"
            android:layout_toRightOf="@+id/txt_rank_standings_final"
            android:layout_marginLeft="15dp"
            android:layout_marginStart="15dp"
            android:textColor="#FFFFFF"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/txt_played_standings_final"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="20dp"
        android:layout_marginEnd="20dp"
        android:layout_marginTop="15dp"
        android:textColor="@color/yellow"
        android:layout_below="@+id/textView"
        android:text="6"
        android:layout_toLeftOf="@+id/txt_points_standings_final"
        android:layout_toStartOf="@+id/txt_points_standings_final"
      />

        <TextView
            android:id="@+id/txt_points_standings_final"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:layout_marginEnd="20dp"
            android:textColor="@color/yellow"
            android:text="12"
            android:layout_marginTop="15dp"
            android:layout_below="@+id/txt_points_standings"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
             />
</RelativeLayout>
</android.support.design.widget.CoordinatorLayout>

i added this single row to the layout inflater but the problem is i am getting something like this:

在此处输入图片说明

The single row is being repeated 3 times in the expandablelistview.

So, How do i make this row static inside the expandablelistview?

UPDATED:

This is my fragment activity which contains the expandablelistview:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/coordinatorLayout"
    xmlns:app="http://schemas.android.com/apk/res-auto">


            <android.support.v4.widget.SwipeRefreshLayout
                android:id="@+id/swipe_refresh"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_behavior="@string/appbar_scrolling_view_behavior">
                <ExpandableListView
                    android:id="@+id/elv"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
                </ExpandableListView>
            </android.support.v4.widget.SwipeRefreshLayout>


</android.support.design.widget.CoordinatorLayout>

This is the custom row layout:

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    android:padding="10dp"
    android:id="@+id/relative_standings"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <TextView
        android:text="#"
        android:id="@+id/txt_rank_standings"
        android:textSize="16sp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:text="TEAM"
        android:textSize="16sp"
        android:layout_marginLeft="15dp"
        android:layout_marginStart="15dp"
        android:layout_toRightOf="@+id/txt_rank_standings"
        android:layout_toEndOf="@+id/txt_rank_standings"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="15dp"
        android:textSize="16sp"
        android:layout_marginEnd="15dp"
        android:layout_toLeftOf="@+id/txt_points_standings"
        android:layout_toStartOf="@+id/txt_points_standings"
        android:text="P" />

    <TextView
        android:id="@+id/txt_points_standings"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="15dp"
        android:textSize="16sp"
        android:layout_marginEnd="15dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:text="PTS" />
</RelativeLayout>

UPDATED:

When i added the header layout it works but the first child row is removed as this pic shows:

在此处输入图片说明

Take a look at this article that has step by step instructions on how to accomplish just that - https://robusttechhouse.com/how-to-add-header-footer-to-expandablelistview-childview/

In order to create an expandable list view with a header in the child view, you will need four XML layout files.

  1. The main layout containing the ExpandableListView
  2. The group item layout
  3. The child item layout
  4. The header of the child view.

The trick is to get the first row and set it as a header:

public View getChildView(int groupPosition, int childPosition, boolean b, View view, ViewGroup viewGroup) {
    ParentObject currentParent = getGroup(groupPosition);
    LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    //The first row is used as header
    if(childPosition == 0){
        view = inflater.inflate(R.layout.child_header, null);
        TextView txtHeader = (TextView)view.findViewById(R.id.txtHeader);
        txtHeader.setText(currentParent.textToHeader);
    }

    //Fix the prior out of bound exception
    if(childPosition > 0 &&* childPosition < getChildrenCount(groupPosition) - 1){
      ChildObject currentChild = getChild(groupPosition, childPosition - 1);
      view = inflater.inflate(R.layout.child_row, null);

      //Set your fields for the header here... i.e
      TextView txtChildName = (TextView)view.findViewById(R.id.txtChildName);
      TextView txtChildAge = (TextView)view.findViewById(R.id.txtChildAge);
    }

  return view;
}

Then increase the Custom Adapter's getChildrenCount() return by 1 , to accommodate for the one we are using for the header. Like this:

@override
public int getChildrenCount(int i){
  return yourModel.get(i).childObjects.size() + 1;
}

Layout holding it altogether

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

   <ExpandableListView
       android:id="@+id/elv"
       android:layout_width="match_parent"
       android:layout_height="match_parent"></ExpandableListView>

</RelativeLayout>

Layout for the Parent Rows

<?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:background="@color/parent_background"
    android:paddingLeft="@dimen/padding_left"
    android:layout_margin="5dp"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/txtMother"
        android:layout_marginTop="10dp"
        android:textStyle="bold"
        android:layout_marginBottom="5dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/txtFather"
        android:layout_marginBottom="10dp"
        android:textStyle="bold"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

Layout for the Child Row

<?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:background="@color/child_background"
    android:paddingLeft="@dimen/padding_left"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/txtChildName"
        android:textColor="@android:color/holo_orange_dark"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"/>
    <TextView
        android:id="@+id/txtChildAge"
        android:textColor="@android:color/holo_orange_dark"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"/>
</LinearLayout>

Layout for the Header

<?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="@color/hf_background"
    android:paddingLeft="@dimen/padding_left">
<TextView
    android:id="@+id/txtHeader"
    android:textColor="@android:color/holo_green_light"
    android:layout_width="match_parent"
    android:gravity="center_vertical"
    android:textStyle="bold"
    android:text="Header"
    android:layout_height="50dp" />
</LinearLayout>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM