Android Studio使用recyclerview實現(xiàn)展開和折疊功能(在之前的微信頁面基礎之上)
Android中RecyclerView點擊item展開列表詳細內容
效果如下:


依然是xml文件的設計,使用了兩個RelativeLayout,zu作為主布局和副布局,里面都加入textview顯示內容,在副布局里加入一個imageview在這里插入圖片描述作為子內容的背景圖,代碼如下:
tab01.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical"> <RelativeLayout android:id="@+id/rl_parent" android:layout_width="match_parent" android:layout_height="50dp" android:background="#00574B"> <TextView android:id="@+id/textViewparent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30dp" android:layout_centerInParent="true" android:textColor="@android:color/white" tools:text="主布局" /> </RelativeLayout> <RelativeLayout android:id="@+id/rl_child" android:layout_width="match_parent" android:layout_height="100dp" android:background="#ffffff" android:visibility="gone"> <ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/textViewchild" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:textSize="25dp" android:textColor="#000000" tools:text="副部局" /> </RelativeLayout> </LinearLayout>
activity_main.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" android:orientation="vertical"> <include layout="@layout/top" /> <FrameLayout android:id="@+id/id_content" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView> </FrameLayout> <include layout="@layout/bottom" /> </LinearLayout>
核心代碼Adapter:
public class adapter extends RecyclerView.Adapter <adapter.myviewholder>{
private List<String> mlist=new ArrayList<>();
private Context context;
private View inflater;
private static final String tag=adapter.class.getSimpleName();
private int expandedPosition=1;
private myviewholder mViewHolder;
public adapter(Context context) {//,List<String> list
this.context=context;
}
public void setExpandCollapseDataList(List<String> list){
mlist=list;
notifyDataSetChanged();
}
@Override
public adapter.myviewholder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
inflater= LayoutInflater.from(context).inflate(R.layout.tab01,viewGroup,false);
myviewholder myviewholder=new myviewholder(inflater);
return myviewholder;
}
@Override
public void onBindViewHolder(final adapter.myviewholder myviewholder, final int j) {
myviewholder.textviewparent.setText(mlist.get(j));
myviewholder.imageview.setImageResource(R.drawable.p1);
myviewholder.textviewchild.setText(mlist.get(j+15));
final boolean isExpanded=j==expandedPosition;
myviewholder.rlChild.setVisibility(isExpanded ? View.VISIBLE : View.GONE);
myviewholder.rlParent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mViewHolder != null) {
mViewHolder.rlChild.setVisibility(View.GONE);
notifyItemChanged(expandedPosition);
}
expandedPosition = isExpanded ? -1 : myviewholder.getAdapterPosition();
mViewHolder = isExpanded ? null : myviewholder;
notifyItemChanged(myviewholder.getAdapterPosition());
}
});
}
@Override
public int getItemCount() {
return mlist == null ? 0 : mlist.size()/2;
}
class myviewholder extends RecyclerView.ViewHolder{
private ImageView imageview;
RelativeLayout rlParent, rlChild;
TextView textviewparent, textviewchild;
public myviewholder(View itemView) {
super(itemView);
rlParent = itemView.findViewById(R.id.rl_parent);
rlChild = itemView.findViewById(R.id.rl_child);
textviewparent = itemView.findViewById(R.id.textViewparent);
textviewchild = itemView.findViewById(R.id.textViewchild);
imageview=itemView.findViewById(R.id.imageview);
}
}
}
主要的代碼是 ViewHolder 中 bindView() , onClick() 這兩個方法對變量的操作。將list中前一半作為主布局數(shù)據(jù),后一半作為副布局的數(shù)據(jù)生成。
數(shù)據(jù)和執(zhí)行
private void initmyData() {
list.add("路德維?!し病へ惗喾?);
list.add("蕭友梅");
list.add("阿炳");
list.add("冼星海");
list.add("聶耳");
list.add("施光南");
list.add("弗里德里克·肖邦");
list.add("羅伯特·舒曼");
list.add("莫扎特");
list.add("約瑟夫·海頓");
list.add("舒伯特");
list.add("巴赫");
list.add("弗侖茲·李斯特");
list.add("約翰奈斯·勃拉姆斯");
list.add("門德爾松");
list.add("德國作曲家、鋼琴家、指揮家,被稱為樂圣。");
list.add("中國專業(yè)音樂教育的奠基人和開拓者、音樂理論家、作曲家。");
list.add("民間音樂家、二胡演奏家,譽為演奏能手。");
list.add("中國近代作曲家、鋼琴家--人民音樂家。");
list.add("中國音樂家--時代歌手。");
list.add("譽為時代歌手,現(xiàn)代抒情歌曲作曲家。");
list.add("譽為鋼琴詩人,波蘭作曲家、鋼琴家。");
list.add("德國著名作曲家、音樂評論家。");
list.add("奧地利作曲家,被譽為神童。");
list.add("奧地利作曲家,維也納古典派奠基者之一。");
list.add("奧地利作曲家--前所未有的最富詩意的音樂家。");
list.add("德國最偉大的古典作曲家之一,管風琴演奏家。");
list.add("天才的匈牙利作曲家、鋼琴家、指揮家和音樂活動家。");
list.add("德國十九世紀后半葉最卓越的、古典樂派最后的一位作曲家。");
list.add("德國著名作曲家。");
}
private void initView1() {
adapter adapter = new adapter(this);
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setHasFixedSize(true);
recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
recyclerView.setAdapter(adapter);
adapter.setExpandCollapseDataList(list);
}
話不多說,上代碼。
github源碼地址:
鏈接: https://github.com/YL009/yl.
總結
到此這篇關于Android Studio使用recyclerview實現(xiàn)展開和折疊(在之前的微信頁面基礎之上)的文章就介紹到這了,更多相關android studio recyclerview實現(xiàn)展開折疊內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android數(shù)據(jù)傳輸中的參數(shù)加密代碼示例
這篇文章主要介紹了Android數(shù)據(jù)傳輸中的參數(shù)加密代碼示例,具有一定參考價值,需要的朋友可以了解下。2017-11-11
基于barcodescanner實現(xiàn)Android二維碼掃描功能
這篇文章主要為大家詳細介紹了基于barcodescanner實現(xiàn)Android二維碼掃描功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07
Android 中TeaPickerView數(shù)據(jù)級聯(lián)選擇器功能的實例代碼
這篇文章主要介紹了Android TeaPickerView數(shù)據(jù)級聯(lián)選擇器 ,需要的朋友可以參考下2019-06-06
Flutter開發(fā)技巧RadialGradient中radius計算詳解
這篇文章主要為大家介紹了Flutter小技巧RadialGradient?中?radius?的計算詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
Android編程實現(xiàn)popupwindow彈出后屏幕背景變成半透明效果
這篇文章主要介紹了Android編程實現(xiàn)popupwindow彈出后屏幕背景變成半透明效果,涉及Android設置getWindows透明度的方法,需要的朋友可以參考下2016-01-01
實例詳解Android自定義ProgressDialog進度條對話框的實現(xiàn)
這篇文章主要介紹了實例詳解Android自定義ProgressDialog進度條對話框的實現(xiàn)的相關資料,需要的朋友可以參考下2016-01-01

