Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在RecyclerView中显示歌曲列表_Java_Android_Eclipse_Android Recyclerview - Fatal编程技术网

Java 无法在RecyclerView中显示歌曲列表

Java 无法在RecyclerView中显示歌曲列表,java,android,eclipse,android-recyclerview,Java,Android,Eclipse,Android Recyclerview,我正在使用recyclerView显示歌曲列表,但无法这样做。请参考代码并告诉我哪里错了。谢谢 歌曲片段:- public class Fragment_Songs extends android.support.v4.app.Fragment { /** * Big list with all the Songs found. */ public ArrayList<Song> songs = new ArrayList<Song>(); private Re

我正在使用recyclerView显示歌曲列表,但无法这样做。请参考代码并告诉我哪里错了。谢谢

歌曲片段:-

  public class Fragment_Songs extends android.support.v4.app.Fragment {
/**
 * Big list with all the Songs found.
 */
public ArrayList<Song> songs = new ArrayList<Song>();

private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;

public static Fragment_Songs newInstance() {
    return new Fragment_Songs();
}


/**
 * Returns a new list with all songs.
 *
 * @note This is different than accessing `songs` directly
 *       because it duplicates it - you can then mess with
 *       it without worrying about changing the original.
 */
public ArrayList<Song> getSongs() {
    ArrayList<Song> songList = new ArrayList<Song>();

    for (Song song : songs)
        songList.add(song);

    return songList;
}

public Fragment_Songs() {
    // Required empty public constructor
}





@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_songs, container, false);


}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    mRecyclerView = (RecyclerView) view.findViewById(R.id.songs_recyclerView);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
    mRecyclerView.setLayoutManager(layoutManager);



    mAdapter = new RecyclerViewMaterialAdapter(new Songs_Adapter(getActivity(), getSongs()));
    mRecyclerView.setAdapter(mAdapter);


    MaterialViewPagerHelper.registerRecyclerView(getActivity(), mRecyclerView, null);
}
}

public class Fragment\u扩展了android.support.v4.app.Fragment{
/**
*找到的所有歌曲的大列表。
*/
public ArrayList songs=new ArrayList();
私人回收视图mRecyclerView;
专用回收器查看适配器mAdapter;
公共静态片段\u新实例(){
返回新片段_歌曲();
}
/**
*返回包含所有歌曲的新列表。
*
*@注意这与直接访问“歌曲”不同
*因为它复制了它-然后你就可以搞乱它了
*它不用担心改变原来的。
*/
公共阵列列表getSongs(){
ArrayList歌曲列表=新的ArrayList();
用于(歌曲:歌曲)
歌曲列表。添加(歌曲);
返回歌曲列表;
}
公共歌曲(){
//必需的空公共构造函数
}
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
返回充气机。充气(R.layout.fragment_songs,容器,假);
}
@凌驾
已创建视图上的公共void(视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
mRecyclerView=(RecyclerView)view.findviewbyd(R.id.songs\u RecyclerView);
RecyclerView.LayoutManager LayoutManager=新的LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(layoutManager);
mAdapter=新的RecycleServiceWMaterialAdapter(新歌_适配器(getActivity(),getSongs());
mRecyclerView.setAdapter(mAdapter);
MaterialViewPagerHelper.RegisterRecyclView(getActivity(),mrecyclView,null);
}
}

这是我的recyclerView适配器:-

公共类歌曲\u适配器扩展了RecyclerView.Adapter{
私有ArrayList歌曲=新建ArrayList();
公共歌曲适配器(上下文c,数组列表歌曲){
歌曲=歌曲;
}
@凌驾
public int getItemCount(){
返回歌曲。大小();
}
@凌驾
public Songs_Adapter.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View=LayoutInflater.from(parent.getContext())
.充气(R.layout.list\u item\u card,父项,假);
ViewHolder=新的ViewHolder(视图);
报税表持有人;
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
Song currentSong=songs.get(位置);
holder.trackName.setText(currentSong.getArtister());
holder.albumInfo.setText(currentSong.getAlbum());
holder.yearInfo.setText(currentSong.getYear());
holder.songDuration.setText((int)currentSong.getDurationMinutes());
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
卡德维尤简历;
影像艺术;
TextView trackName;
文本视图相册信息;
TextView yearInfo;
TextView歌曲持续时间;
公共视图持有者(视图项视图){
超级(项目视图);
cv=(CardView)itemView.findViewById(R.id.list\u item\u card);
albumArt=(ImageView)itemView.findViewById(R.id.albumArtImage);
trackName=(TextView)itemView.findViewById(R.id.trackName);
albumInfo=(TextView)itemView.findViewById(R.id.albumData);
yearInfo=(TextView)itemView.findViewById(R.id.yearInfo);
songDuration=(TextView)itemView.findViewById(R.id.songDuration);
}
}
公共阵列列表getSongs(){
返回歌曲;
}
}


我的arrayList代码正确吗?如果有人愿意帮忙,我就不能让它工作。谢谢。

乍一看,您的适配器中似乎没有使用正确的构造函数。 您正在使用

mAdapter = new RecyclerViewMaterialAdapter(new Songs_Adapter());
你应该使用

mAdapter = new RecyclerViewMaterialAdapter(new Songs_Adapter(getActivity(), songs));

您正在创建songs ArrayList,但从未将其传递给适配器。那么适配器将如何获取数据?做这样的事-

mAdapter = new RecyclerViewMaterialAdapter(new Songs_Adapter(getActivity(), songs));
mRecyclerView.setAdapter(mAdapter);

这样,您的songs ArrayList将被传递到适配器,并可用于填充RecyclerView。

已尝试,但仍不起作用:/u是否可以提出其他建议?非常感谢,您有两个名为onBindViewHolder的方法。仅使用声明上方带有@Override标记的一个(将内容从另一个复制到该声明),并删除另一个。已执行此操作,但现在无法在我的viewHolder中映射。你能给我推荐一下我写的代码吗:-@Override public void onBindViewHolder(SongViewHolder SongHolder,int position){Song currentSong=songs.get(position);SongHolder.trackName.setText(currentSong.GetArtister());SongHolder.albumInfo.setText(currentSong.getAlbum());SongHolder.yearInfo.setText(currentSong.getYear());SongHolder.songDuration.setText((int)currentSong.getDurationMinutes());}现在它说“方法不重写超类中的方法”我让onBindViewHolder正常工作。但仍然无法显示歌曲列表。我的歌曲片段有问题吗?你有错误吗?什么具体不起作用?我更新了问题,请重新阅读谢谢:)嘿,非常感谢。我重写了代码,结果发现我不知道如何将arraylist传递给其他类。更新问题
mAdapter = new RecyclerViewMaterialAdapter(new Songs_Adapter(getActivity(), songs));
mRecyclerView.setAdapter(mAdapter);