片段中的 RecyclerView 未加载
RecyclerView in a Fragment not loading
Tl:dr: 我创建了自己的底部导航栏,它重定向到 3 个不同的片段。 1 个片段(旅行)有一个回收视图,我在其中显示 3 个信息(ImageView、2 个 TextView)。此 recyclerview 未加载(无错误消息),该片段上有一个空白屏幕。
我怀疑问题在于我从 Fragment Java class 加载回收器的方式但没有成功(通过多个 YT 教程和我能找到的 Whosebug 文章)
我尝试过的一些步骤(我对 Android 比较陌生,所以尝试了不同的场景)
- 清洁项目
- 检查@override(其他 Whosebug 文章)
- 在片段中:将我的代码拆分为 2:在 OncreateView 中扩展布局,在 OnViewCreated 中加载适配器。
- 另一个片段(带有硬编码文本)有效,表明 Fragmentmanager 似乎有效
感谢任何建议
片段
package com.example.projectapp;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.ListAdapter;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Trip extends Fragment {
private RecyclerView.Adapter adapter;
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_trips, container, false);
RecyclerView recyclerView= (RecyclerView) v.findViewById(R.id.recycler);
adapter listAdapter= new adapter();
recyclerView.setAdapter(listAdapter);
RecyclerView.LayoutManager layoutManager= new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
return v;
}}
---------------------------------------------------------
Adapter class
---------------------------------------------------------
package com.example.projectapp;
import android.provider.ContactsContract;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class adapter extends RecyclerView.Adapter<adapter.adapterview> {
public class adapterview extends RecyclerView.ViewHolder{
public LinearLayout linearLayout;
public ImageView imageView;
public TextView title;
public TextView short_desc;
public adapterview(@NonNull View itemView) {
super(itemView);
linearLayout=itemView.findViewById(R.id.card);
imageView=itemView.findViewById(R.id.pix);
title=itemView.findViewById(R.id.titlecard);
short_desc=itemView.findViewById(R.id.short_desc);
}
}
public List<card> item_list= Arrays.asList(
new card(R.drawable.ic_home,"this is a test","testing 2"),
new card(R.drawable.ic_home,"this is a test1","testing 3"),
new card(R.drawable.ic_home,"this is a test2","testing 4")
);
@NonNull
@Override
public adapterview onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.card,parent,false);
return new adapterview(v);
}
@Override
public void onBindViewHolder(@NonNull adapterview holder, int position) {
card current= item_list.get(position);
holder.title.setText(current.getTitle());
holder.short_desc.setText(current.getDesc());
holder.imageView.setImageResource(current.getimage());
}
@Override
public int getItemCount() {
return item_list.size();
}
}
不要在 onCreateView 上调用回收器,在 onViewCreated 中调用。
@Override
public View onViewCreated(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
RecyclerView recyclerView= (RecyclerView) v.findViewById(R.id.recycler);
adapter listAdapter= new adapter();
recyclerView.setAdapter(listAdapter);
RecyclerView.LayoutManager layoutManager= new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
}
}
只需在设置 LayoutManager
后设置 RecyclerView
适配器。所以将这些行重新排序为:
RecyclerView recyclerView = (RecyclerView) v.findViewById(R.id.recycler);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
adapter listAdapter= new adapter();
recyclerView.setAdapter(listAdapter);
好消息我解决了这个问题(但不确定根本原因)。我基本上做了 2 处更改,以防这对其他人有帮助:
1. 我向我的适配器(在片段文件中)传递了一个对象列表和上下文。
2. 我从布局中删除了 1 个 Textview(来自回收站视图的项目),这可能会阻止它加载 (?)
现在,下一个挑战是尝试使用卡片视图,因为这种线性布局不是很好
谢谢大家
Tl:dr: 我创建了自己的底部导航栏,它重定向到 3 个不同的片段。 1 个片段(旅行)有一个回收视图,我在其中显示 3 个信息(ImageView、2 个 TextView)。此 recyclerview 未加载(无错误消息),该片段上有一个空白屏幕。 我怀疑问题在于我从 Fragment Java class 加载回收器的方式但没有成功(通过多个 YT 教程和我能找到的 Whosebug 文章)
我尝试过的一些步骤(我对 Android 比较陌生,所以尝试了不同的场景) - 清洁项目 - 检查@override(其他 Whosebug 文章) - 在片段中:将我的代码拆分为 2:在 OncreateView 中扩展布局,在 OnViewCreated 中加载适配器。 - 另一个片段(带有硬编码文本)有效,表明 Fragmentmanager 似乎有效
感谢任何建议
片段
package com.example.projectapp;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.ListAdapter;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Trip extends Fragment {
private RecyclerView.Adapter adapter;
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_trips, container, false);
RecyclerView recyclerView= (RecyclerView) v.findViewById(R.id.recycler);
adapter listAdapter= new adapter();
recyclerView.setAdapter(listAdapter);
RecyclerView.LayoutManager layoutManager= new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
return v;
}}
---------------------------------------------------------
Adapter class
---------------------------------------------------------
package com.example.projectapp;
import android.provider.ContactsContract;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class adapter extends RecyclerView.Adapter<adapter.adapterview> {
public class adapterview extends RecyclerView.ViewHolder{
public LinearLayout linearLayout;
public ImageView imageView;
public TextView title;
public TextView short_desc;
public adapterview(@NonNull View itemView) {
super(itemView);
linearLayout=itemView.findViewById(R.id.card);
imageView=itemView.findViewById(R.id.pix);
title=itemView.findViewById(R.id.titlecard);
short_desc=itemView.findViewById(R.id.short_desc);
}
}
public List<card> item_list= Arrays.asList(
new card(R.drawable.ic_home,"this is a test","testing 2"),
new card(R.drawable.ic_home,"this is a test1","testing 3"),
new card(R.drawable.ic_home,"this is a test2","testing 4")
);
@NonNull
@Override
public adapterview onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.card,parent,false);
return new adapterview(v);
}
@Override
public void onBindViewHolder(@NonNull adapterview holder, int position) {
card current= item_list.get(position);
holder.title.setText(current.getTitle());
holder.short_desc.setText(current.getDesc());
holder.imageView.setImageResource(current.getimage());
}
@Override
public int getItemCount() {
return item_list.size();
}
}
不要在 onCreateView 上调用回收器,在 onViewCreated 中调用。
@Override
public View onViewCreated(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
RecyclerView recyclerView= (RecyclerView) v.findViewById(R.id.recycler);
adapter listAdapter= new adapter();
recyclerView.setAdapter(listAdapter);
RecyclerView.LayoutManager layoutManager= new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
}
}
只需在设置 LayoutManager
后设置 RecyclerView
适配器。所以将这些行重新排序为:
RecyclerView recyclerView = (RecyclerView) v.findViewById(R.id.recycler);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
adapter listAdapter= new adapter();
recyclerView.setAdapter(listAdapter);
好消息我解决了这个问题(但不确定根本原因)。我基本上做了 2 处更改,以防这对其他人有帮助: 1. 我向我的适配器(在片段文件中)传递了一个对象列表和上下文。 2. 我从布局中删除了 1 个 Textview(来自回收站视图的项目),这可能会阻止它加载 (?)
现在,下一个挑战是尝试使用卡片视图,因为这种线性布局不是很好 谢谢大家