Expanndablerecyclearview의expand()와collapse()의 주의점

개시하다


Expanndablerecyclearview의 부모view에서 더 보기 닫기를 반복합니다.
이런 느낌.

전제 조건


우선 여기에 각 파일을 설치하는 것을 참고하시오.
http://qiita.com/iKASiH/items/6707f9062e2e4bc48696

이루어지다


필요 서류

  • layout file
  • recyclerview.xml
  • parent_item.xml
  • child_item.xml
  • java function file
  • Parent_ViewHolder.java
  • Child_ViewHolder.java
  • Home_Adapter.java
  • MainActivity.java
  • java entity file
  • Home.java
  • Child.java
  • Parent.java
  • 추가 기능

  • layout file
  • 두 번째 트리거로 인해 배경색 삭제parent_item.xmlrecyclerview.xml
  • 처음에 다 꺼져 있었기 때문에 구성을 모두 다시 보기parent_item.xml
  • function file
  • 열 때 닫기textParent_ViewHolder.xml
  • 로 전환
  • 축소로 전환한 후 textParent_ViewHolder.xml
  • 자세히 보기
  • java entity file
  • 변경 없음(직접 사용)
  • 그럼 실시해.

    배치


    recyclerview.xml
    <?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="wrap_content">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerview"
            android:scrollbars="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>
    
    parent_item.xml
    <?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="wrap_content">
        <TextView
            android:gravity="center"
            android:id="@+id/parenttext"
            android:text="開く"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize" />
    </LinearLayout>
    
    child_item.xml
    <?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="wrap_content">
        <TextView
            android:id="@+id/childtext"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize" />
    </LinearLayout>
    

    기능


    Parent_ViewHolder
    package jp.app.oomae.hisaki.expandable_recyclerview;
    
    import android.view.View;
    import android.widget.TextView;
    import com.thoughtbot.expandablerecyclerview.viewholders.GroupViewHolder;
    
    public class Parent_ViewHolder extends GroupViewHolder {
    
        private TextView text1;
    
        public Parent_ViewHolder(View itemView) {//親viewのid取得
            super(itemView);
            text1 = (TextView)itemView.findViewById(R.id.parenttext);
        }
        public void open(){
            text1.setText("閉じる");
        }
        public void close(){
            text1.setText("開く");
        }
    
        @Override//広がる時呼ばれる
        public void expand() {
            open();
        }
        @Override//縮ませた時呼ばれる
        public void collapse() {
            close();
        }
    }
    
    
    자 실행!!

    분명히 열지 않았는데 닫혀버렸어...
    분명히 열었는데'열기'가 됐어...

    해결책


    해결 방법은 모든 스크롤이 열려 있는지 여부와text를 반영하는지 판단하는 것입니다.
    Home_Adapter.java
    package jp.app.oomae.hisaki.expandable_recyclerview;
    
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    import com.thoughtbot.expandablerecyclerview.ExpandCollapseController;
    import com.thoughtbot.expandablerecyclerview.ExpandableRecyclerViewAdapter;
    import com.thoughtbot.expandablerecyclerview.models.ExpandableGroup;
    
    import java.util.List;
    
    public class Home_Adapter extends ExpandableRecyclerViewAdapter<Parent_ViewHolder, Child_ViewHolder> {
    
        private ExpandCollapseController expandCollapseController;
    
        public Home_Adapter(List<? extends ExpandableGroup> groups) {
            super(groups);
            this.expandCollapseController = new ExpandCollapseController(expandableList, this);
        }
    
        @Override
        public Parent_ViewHolder onCreateGroupViewHolder(final ViewGroup parent, final int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.parent_item, parent, false);
            return new Parent_ViewHolder(view);
        }
    
        @Override
        public Child_ViewHolder onCreateChildViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.child_item, parent, false);
            return new Child_ViewHolder(view);
        }
    
        @Override
        public void onBindGroupViewHolder(Parent_ViewHolder holder, int flatPosition, ExpandableGroup group) {
            /*--------------ここを追加---------------*/
            if(isGroupExpanded(flatPosition)){
                holder.open();
            }
            else{
                holder.close();
            }
            /*---------------------------------------*/
        }
    
        @Override
        public void onBindChildViewHolder(Child_ViewHolder holder, int flatPosition, ExpandableGroup group, int childIndex) {
        }
    }
    
    이 프로그램 라이브러리에는 isGroup Expaned 방법이 존재합니다. 이 방법은 열려 있는지 안 열려 있는지 판단할 수 있습니다.
    flatposition을 매개 변수로 하면 부모view 상태에 따라 진실이나 가짜가 있을 수 있습니다.
    그것으로text를 다시 반영합니다.
    이게 완성이야. 너무 급해.
    부디 평론을 발표해 주십시오.
    Github : https://github.com/hisakioomae/Expandable_Recyclerview_sample

    좋은 웹페이지 즐겨찾기