效果圖如下(沒搞GIF轉換工具,只能截圖了。。。):
佈局文件activity_main.xml,就一個recyclerview:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView>
</android.support.constraint.ConstraintLayout>
代碼MainActivity:
package seemore.test.com.seemorerecycleview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
recyclerView = (RecyclerView) findViewById(R.id.rv_main);
List<String> list = new ArrayList<>();
for (int i = 0; i < 30; i++) {
list.add("哈薩ki" + i);
}
SeeMoreAdapter seeMoreAdapter = new SeeMoreAdapter(list);
recyclerView.setLayoutManager(new GridLayoutManager(this, 4));
recyclerView.setAdapter(seeMoreAdapter);
seeMoreAdapter.setOnITEMClickListener(new SeeMoreAdapter.OnItemClick() {
@Override
public void onItemClick(int position) {
int mPosition = position + 1;
Toast.makeText(getBaseContext(),"點擊了第"+ mPosition +"個哈薩ki",Toast.LENGTH_SHORT).show();
}
});
}
}
佈局文件item_view:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:id="@+id/rl_item"
>
<ImageView
android:id="@+id/iv_item"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/itemView"
android:text="name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@+id/iv_item"/>
</RelativeLayout>
代碼SeeMoreAdapter:
package seemore.test.com.seemorerecycleview;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.List;
class SeeMoreAdapter extends RecyclerView.Adapter<SeeMoreAdapter.SeeMoreViewHolder> {
private final static int TYPE_NORMAL = 0;//正常條目
private final static int TYPE_SEE_MORE = 1;//查看更多
private final static int TYPE_HIDE = 2;//收起
private List<String> mList;
private boolean mOpen = false;//是否是展開狀態
SeeMoreAdapter(List<String> mList) {
this.mList = mList;
}
@NonNull
@Override
public SeeMoreViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_view, viewGroup, false);
return new SeeMoreViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull SeeMoreViewHolder seeMoreViewHolder, final int position) {
// TextView textView = (TextView) seeMoreViewHolder.textView;
if (getItemViewType(position) == TYPE_HIDE) {
seeMoreViewHolder.textView.setText("收起");
seeMoreViewHolder.rl_item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOpen = false;
notifyDataSetChanged();
}
});
} else if (getItemViewType(position) == TYPE_SEE_MORE) {
seeMoreViewHolder.textView.setText("查看更多");
seeMoreViewHolder.rl_item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOpen = true;
notifyDataSetChanged();
}
});
} else {
seeMoreViewHolder.textView.setText(mList.get(position));
seeMoreViewHolder.rl_item.setClickable(false);
if (onItemClick!=null){
seeMoreViewHolder.rl_item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClick.onItemClick(position);
}
});
}
}
}
@Override
public int getItemViewType(int position) {
if (mList.size() <= 4) {
return TYPE_NORMAL;
}
if (mOpen) {
if (position == mList.size()) {
return TYPE_HIDE;
} else {
return TYPE_NORMAL;
}
} else {
if (position == 3) {
return TYPE_SEE_MORE;
} else {
return TYPE_NORMAL;
}
}
}
@Override
public int getItemCount() {
if (mList == null || mList.size() == 0) {
return 0;
}
if (mList.size() > 4) {
//若現在是展開狀態 條目數量需要+1 "收起"條目
if (mOpen) {
return mList.size() + 1;
} else {
return 4;
}
} else {
return mList.size();
}
}
class SeeMoreViewHolder extends RecyclerView.ViewHolder {
TextView textView ;
ImageView iv_item ;
RelativeLayout rl_item ;
public SeeMoreViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.itemView);
iv_item = itemView.findViewById(R.id.iv_item);
rl_item = itemView.findViewById(R.id.rl_item);
}
}
public interface OnItemClick{
void onItemClick(int position);
}
private OnItemClick onItemClick;
public void setOnITEMClickListener(OnItemClick onItemClick){
this.onItemClick = onItemClick;
}
}
代碼鏈接:https://download.csdn.net/download/qq_38306233/12311257