Java 在recyclerview中添加节
我制作了recyclerview,现在我想在recyclerview中添加标题(我的意思是1个标题位于recyclerview顶部,其他标题可能位于recyclerview中间) 这是我的主要活动,希望arraylist中给出的提示能进一步澄清我的问题:Java 在recyclerview中添加节,java,android,android-recyclerview,header,Java,Android,Android Recyclerview,Header,我制作了recyclerview,现在我想在recyclerview中添加标题(我的意思是1个标题位于recyclerview顶部,其他标题可能位于recyclerview中间) 这是我的主要活动,希望arraylist中给出的提示能进一步澄清我的问题: public类MainActivity扩展了AppCompatActivity{ @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); s
public类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
回收视图…
…(裁员经理);
ArrayList rvList=新的ArrayList();
//我想在这里添加“标题1”
添加(新Rv(R.mipmap.ic_launcher_round,“小罗伯特·多恩里”,“铁人”);
添加(新Rv(R.mipmap.ic_launcher_round,“汤姆·霍兰德”,“蜘蛛侠”);
添加(新Rv(R.mipmap.ic_launcher_round,“克里斯·埃文斯”,“美国队长”);
//我想在这里添加标题2
添加(新Rv(R.mipmap.ic_launcher_round,“Mark Ruffalo”,“Hulk”));
添加(新Rv(R.mipmap.ic_launcher_round,“Chris Hemsworth”,“Thor”);
//我想在这里添加标题3
添加(新Rv(R.mipmap.ic_launcher_round,“Tom Hiddleston”,“Loki”);
添加(新Rv(R.mipmap.ic_launcher_round,“Zoe Saldana”,“Gamora”);
RvAdapter适配器=新的RvAdapter(rvList);
recyclerView.setAdapter(适配器);
}
}
这是我用于此recyclerView的适配器:
public class RvAdapter extends RecyclerView.Adapter<RvAdapter.RvHolderView> {
public ArrayList<Rv> rvList;
public RvAdapter(ArrayList<Rv> rvList) {
this.rvList = rvList;
}
@NonNull
@Override
public RvHolderView onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.rv_view, viewGroup, false);
return new RvHolderView(view);
}
@Override
public void onBindViewHolder(@NonNull RvHolderView rvHolderView, int i) {
Rv current = rvList.get(i);
rvHolderView.imageView.setImageResource(current.getImage());
rvHolderView.text1.setText(current.getText1());
rvHolderView.text2.setText(current.getText2());
}
@Override
public int getItemCount() {
return rvList.size();
}
public static class RvHolderView extends RecyclerView.ViewHolder {
public ImageView imageView;
public TextView text1;
public TextView text2;
public RvHolderView(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.img);
text1 = itemView.findViewById(R.id.texta);
text2 = itemView.findViewById(R.id.textb);
}
}
}
公共类RvAdapter扩展了RecyclerView.Adapter{
公共阵列列表;
公共RvAdapter(ArrayList rvList){
this.rvList=rvList;
}
@非空
@凌驾
public RvHolderView onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
View View=LayoutFlater.from(viewGroup.getContext()).inflate(R.layout.rv_视图,viewGroup,false);
返回新的RvHolderView(视图);
}
@凌驾
BindViewHolder上的公共无效(@NonNull RvHolderView RvHolderView,int i){
Rv电流=rvList.get(i);
rvHolderView.imageView.setImageResource(current.getImage());
rvHolderView.text1.setText(current.getText1());
rvHolderView.text2.setText(current.getText2());
}
@凌驾
public int getItemCount(){
返回rvList.size();
}
公共静态类RvHolderView扩展了RecyclerView.ViewHolder{
公共影像视图;
公共文本视图文本1;
公共文本视图文本2;
public RvHolderView(@NonNull View itemView){
超级(项目视图);
imageView=itemView.findViewById(R.id.img);
text1=itemView.findviewbyd(R.id.texta);
text2=itemView.findviewbyd(R.id.textb);
}
}
}
您可以按不同类型制作。您可以在
Rv
示例中添加type
字段:
rvList.add(new Rv(R.mipmap.ic_launcher_round, "Robert Doenry Jr.", "IronMan", "header"));
rvList.add(new Rv(R.mipmap.ic_launcher_round, "Robert Doenry Jr.", "IronMan","item"));
rvList.add(new Rv(R.mipmap.ic_launcher_round, "Tom Holland", "Spider Man","item"));
在回收器视图中,您可以覆盖getItemViewType
例如:
override fun getItemViewType(position: Int): Int {
return if(itemList(position).type.equals("header")) 0 else 1
}
并在onCreateViewHolder
或onBindViewHolder
中按不同类型创建不同的ViewHolder
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return when (type) {
type1 -> //do your staff
type2 -> //do your staff
else -> //do your Staff
}
}
您需要的是多类型回收器视图: 假设列表的标题只是一个ImageView,列表的其他项目只是一个文本,如下所示:
- 标题(图像视图)
- 项目(文本视图)
- 项目(文本视图)
- 项目(文本视图)
interface RecyclerData {
val viewType: Int
}
enum class ItemsViewType{
HEADER,
ITEM
}
data class PrimaryItem(val headerImageUri:String) : RecyclerData {
override val viewType = ItemsViewType.HEADER.ordinal
}
data class SecondaryItem(val itemContent:String) : RecyclerData {
override val viewType = ItemsViewType.ITEM.ordinal
}
class MyBeautifulAdapter<T : RecyclerData> : RecyclerView.Adapter<RecyclerViewHolder<T>>(){
var items: ArrayList<T> = arrayListOf()
set(value) {
field = value
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewHolder<T> {
return when(viewType){
ItemsViewType.HEADER.ordinal -> HeaderViewHolder(LayoutInfaltor.from(parent.context).inflate(R.layout.row_header,parent,false)),
ItemsViewType.ITEM.ordinal -> ItemViewHolder(LayoutInflator.from(parent.context).inflate(R.layout.row_secondary,parent,false))
}
}
override fun getItemViewType(position: Int): Int {
return items[position].viewType
}
override fun onBindViewHolder(holder: RecyclerViewHolder<T>, position: Int) {
holder.bind(items[position])
}
类MyBeautifulAdapter:RecyclerView.Adapter(){
变量项:ArrayList=arrayListOf()
设置(值){
字段=值
notifyDataSetChanged()
}
override fun onCreateViewHolder(父级:ViewGroup,viewType:Int):RecycleServiceWholder{
返回时间(viewType){
ItemsViewType.HEADER.ordinal->HeaderViewHolder(LayoutInfaltor.from(parent.context).充气(R.layout.row_HEADER,parent,false)),
ItemsViewType.ITEM.ordinal->ItemViewHolder(LayoutInflator.from(parent.context)。充气(R.layout.row_secondary,parent,false))
}
}
覆盖getItemViewType(位置:Int):Int{
返回项目[位置].viewType
}
覆盖BindViewHolder(holder:RecycleServiceWholder,位置:Int){
持有者绑定(项目[位置])
}
open class RecyclerViewHolder<T : RecyclerData>(val itemView: View) : RecyclerView.ViewHolder(itemView){
open fun bindData(item:T){
}
}
class HeaderViewHolder(private val view:View) : RecyclerViewHolder<PrimaryItem>(view){
override fun bindData(item: PrimaryItem) {
// load header image he
}
}
class ItemViewHolder(private val view:View) : RecyclerViewHolder<SecondaryItem>(view){
override fun bindData(item: SecondaryItem) {
// set textView content here
}
}
打开类RecyclerViewWholder(val itemView:View):RecyclerView.ViewHolder(itemView){
打开数据(项目:T){
}
}
类HeaderServiceWholder(私有值视图:视图):RecycleServiceWholder(视图){
覆盖数据(项:PrimaryItem){
//加载标题图像
}
}
类ItemViewHolder(私有val视图:视图):RecycleServiceWholder(视图){
覆盖数据(项目:SecondaryItem){
//在此处设置文本视图内容
}
}
也许这会帮助你:我没有得到任何这些。请@M.Sianaki一步一步地建议我实施什么以及在哪里实施?我没有得到这些请@Mindgamer一步一步地建议我。