Android RecyclerView不显示列表中的元素
我尝试创建一个RecyclerView,它显示我手机上预先填充的ArrayList中的歌曲。以下是我的活动代码:Android RecyclerView不显示列表中的元素,android,android-layout,android-recyclerview,Android,Android Layout,Android Recyclerview,我尝试创建一个RecyclerView,它显示我手机上预先填充的ArrayList中的歌曲。以下是我的活动代码: public class HomeActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { private RecyclerView songRecyclerView; private RecyclerView.Adapter songRec
public class HomeActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private RecyclerView songRecyclerView;
private RecyclerView.Adapter songRecyclerAdapter;
private RecyclerView.LayoutManager recyclerLayoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//get the songs list for the adapter
ArrayList<Audio> songList;
StorageUtils storageUtils = new StorageUtils(getApplicationContext());
songList = storageUtils.loadAudio();
//Recycler view setup for songs display
songRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
songRecyclerView.setHasFixedSize(true);
recyclerLayoutManager = new LinearLayoutManager(this);
songRecyclerView.setLayoutManager(recyclerLayoutManager);
songRecyclerAdapter = new SongAdapter(songList);
songRecyclerView.setAdapter(songRecyclerAdapter);
}
公共类HomeActivity扩展了AppCompatActivity
实现NavigationView.OnNavigationItemSelectedListener{
私人回收站;
私有回收器查看适配器songRecyclerAdapter;
private RecyclerView.LayoutManager recyclerLayoutManager;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//获取适配器的歌曲列表
ArrayList如果有人有类似的问题,我可以通过简单地将回收器视图项XML中的约束布局更改为线性布局(或者我猜除了约束之外的任何类型的布局)并编译来解决它
它工作得很好,正确地显示了所有内容。然后像以前一样将XML更改回约束布局,所有内容仍然工作得很好。在这一点上,我认为它将永远是一个谜。对适配器构造函数进行一些更改,如下面的代码所示
public Context context;
// Constructor
public SongAdapter(Context context,ArrayList<Audio> songList){
this.context=context;
this.songList = songList;
}
RecyclerView recyclerView;
SongAdapter songRecyclerAdapter;
private void setAdapter(){
recyclerView.setLayoutManager(new LinearLayoutManager(this));
if (songRecyclerAdapter==null) {
songRecyclerAdapter = new SongAdapter(this,songList);
recyclerView.setAdapter(songRecyclerAdapter);
songRecyclerAdapter.notifyDataSetChanged();
}
else{
songRecyclerAdapter.notifyDataSetChanged();
}
}
并删除这行代码
private RecyclerView.Adapter songRecyclerAdapter;
并使用下面的代码设置适配器
public Context context;
// Constructor
public SongAdapter(Context context,ArrayList<Audio> songList){
this.context=context;
this.songList = songList;
}
RecyclerView recyclerView;
SongAdapter songRecyclerAdapter;
private void setAdapter(){
recyclerView.setLayoutManager(new LinearLayoutManager(this));
if (songRecyclerAdapter==null) {
songRecyclerAdapter = new SongAdapter(this,songList);
recyclerView.setAdapter(songRecyclerAdapter);
songRecyclerAdapter.notifyDataSetChanged();
}
else{
songRecyclerAdapter.notifyDataSetChanged();
}
}
哇!!相信我,你的代码看起来很完美,我最初的反应是你把文本变成了白色。好吧!我有一些东西要测试。试着在recyclerview项的xml中添加硬代码值。比如第一个textview text=“abc”和第二个“test”。查看它是否填充并注释掉OnBindView中的行看起来仍然没有任何内容…我从一开始就在项目的xml中放置了一些硬编码值,只是为了初始化。但是,是的,仍然是空行@pulkitok…很有趣。使用LinearLayout,硬编码值似乎正在工作,我我现在试着看看我的数据集中的数据是否也正确加载。等等,它在没有约束布局的情况下工作了吗?我只是胡乱猜测,可能视图中的数据被填充了,但TextView约束不正确,比如可能是您设置的约束,可能是强制TextView在手机的正常视图窗口外显示。尝试在constraint layout中旋转屏幕,查看视图是否仍然存在,或者是否也可以在平板电脑上打开应用程序。
private RecyclerView.Adapter songRecyclerAdapter;
RecyclerView recyclerView;
SongAdapter songRecyclerAdapter;
private void setAdapter(){
recyclerView.setLayoutManager(new LinearLayoutManager(this));
if (songRecyclerAdapter==null) {
songRecyclerAdapter = new SongAdapter(this,songList);
recyclerView.setAdapter(songRecyclerAdapter);
songRecyclerAdapter.notifyDataSetChanged();
}
else{
songRecyclerAdapter.notifyDataSetChanged();
}
}