Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.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
Android 片段中的回收器视图_Android - Fatal编程技术网

Android 片段中的回收器视图

Android 片段中的回收器视图,android,Android,我正在开发一个应用程序。在这个应用程序中,我想这样做,当我点击一个按钮时,它将启动fragment,在fragment中,我创建了一个recycler视图。“回收器”视图将显示设备中的歌曲列表。但问题只是片段显示。没有用于recyclerview甚至recyclerview的布局。 这是我的片段类,回收器视图位于片段类中: public class Fragment_song extends Fragment { //ArrayList<HashMap<String, String

我正在开发一个应用程序。在这个应用程序中,我想这样做,当我点击一个按钮时,它将启动fragment,在fragment中,我创建了一个recycler视图。“回收器”视图将显示设备中的歌曲列表。但问题只是片段显示。没有用于recyclerview甚至recyclerview的布局。
这是我的片段类,回收器视图位于片段类中:

public class Fragment_song extends Fragment {

//ArrayList<HashMap<String, String>> songs;
private RecyclerView recyclerView;
SongAdapter mAdapter;


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.song_layout, container, false);
    recyclerView = (RecyclerView) v.findViewById(R.id.recycler_View);

    // mAdapter = new MoviesAdapter(songs);
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    mAdapter=new SongAdapter();
    recyclerView.setAdapter(mAdapter);


    return v;
}


public void SongList() {
    String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
    ContentResolver cr = getActivity().getContentResolver();
    String[] projection = {
            MediaStore.Audio.Media._ID,
            MediaStore.Audio.Media.ARTIST,
            MediaStore.Audio.Media.TITLE,
            MediaStore.Audio.Media.DATA,
            MediaStore.Audio.Media.DISPLAY_NAME,
            MediaStore.Audio.Media.DURATION
    };
    String sortOrder = MediaStore.Audio.Media.TITLE + " ASC";

    Cursor cur = cr.query(
            MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
            projection,
            selection,
            null,
            sortOrder);

    mAdapter.songs = new ArrayList<HashMap<String, String>>();
    while (cur.moveToNext()) {
        HashMap<String, String> map = new HashMap<String, String>();
      /*  songs.add(cur.getString(0) + "||"
                + cur.getString(1) + "||"
                + cur.getString(2) + "||"
                + cur.getString(3) + "||"
                + cur.getString(4) + "||" );*/

        map.put("ID", cur.getString(0));
        map.put("artist", cur.getString(1));
        map.put("title", cur.getString(2));
        map.put("displayname", cur.getString(3));
        map.put("duration", cur.getString(4));

        mAdapter.songs.add(map);


    }

}

 }
公共类片段\u宋扩展片段{
//雅乐歌曲;
私人回收站;
松鸡;
@可空
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图v=充气机。充气(R.layout.song_布局,容器,错误);
recyclerView=(recyclerView)v.findViewById(R.id.recycler\u视图);
//mAdapter=新电影适配器(歌曲);
RecyclerView.LayoutManager mLayoutManager=新的LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(mLayoutManager);
setItemAnimator(新的DefaultItemAnimator());
mAdapter=新歌曲适配器();
recyclerView.setAdapter(mAdapter);
返回v;
}
公开歌曲列表(){
字符串选择=MediaStore.Audio.Media.IS_MUSIC+“!=0”;
ContentResolver cr=getActivity().getContentResolver();
字符串[]投影={
MediaStore.Audio.Media.\u ID,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY\u名称,
MediaStore.Audio.Media.DURATION
};
字符串排序器=MediaStore.Audio.Media.TITLE+“ASC”;
游标cur=cr.query(
MediaStore.Audio.Media.EXTERNAL\u CONTENT\u URI,
投影,
选择,
无效的
分拣机);
mAdapter.songs=newarraylist();
while(cur.moveToNext()){
HashMap=newHashMap();
/*songs.add(cur.getString(0)+“| |”
+cur.getString(1)+“| |”
+cur.getString(2)+“| |”
+cur.getString(3)+“| |”
+cur.getString(4)+“| |””*/
map.put(“ID”,cur.getString(0));
map.put(“艺术家”,cur.getString(1));
map.put(“title”,cur.getString(2));
map.put(“displayname”,cur.getString(3));
map.put(“duration”,cur.getString(4));
mAdapter.songs.add(地图);
}
}
}
回收器视图的我的适配器。请在这个…因为在运行时,有时我像没有适配器连接。跳过布局

public class SongAdapter extends RecyclerView.Adapter<SongAdapter.MyViewHolder> {
ArrayList<HashMap<String, String>> songs=new ArrayList<HashMap<String, String>>() ;





@Override
public SongAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.recyclerview, parent, false);

    MyViewHolder viewHolder = new MyViewHolder(itemView);
    return viewHolder;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    //Movie movie = moviesList.get(position);
    holder.title.setText(songs.get(position).get("displayname"));
    holder.artist.setText(songs.get(position).get("artist"));
    holder.duration.setText(songs.get(position).get("duration"));
}



@Override
public int getItemCount() {
    return songs.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView title, duration, artist;


    public MyViewHolder(View view) {
        super(view);
        title = (TextView) view.findViewById(R.id.title);
        artist = (TextView) view.findViewById(R.id.artist);
        duration = (TextView) view.findViewById(R.id.duration);
    }
}
 }
公共类SongAdapter扩展了RecyclerView.Adapter{
ArrayList歌曲=新建ArrayList();
@凌驾
public SongAdapter.MyViewHolder onCreateViewHolder(ViewGroup父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.recyclerview,父级,假);
MyViewHolder viewHolder=新的MyViewHolder(itemView);
返回视图持有者;
}
@凌驾
公共无效onBindViewHolder(MyViewHolder,int位置){
//Movie Movie=moviesList.get(位置);
holder.title.setText(songs.get(position.get)(“displayname”);
holder.artist.setText(songs.get(position.get(“艺术家”));
holder.duration.setText(songs.get(position.get(“duration”));
}
@凌驾
public int getItemCount(){
返回歌曲。大小();
}
公共类MyViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图标题、持续时间、艺术家;
公共MyViewHolder(视图){
超级(视图);
title=(TextView)view.findViewById(R.id.title);
artist=(TextView)view.findViewById(R.id.artist);
duration=(TextView)view.findViewById(R.id.duration);
}
}
}

您忘了在onCreateView()中调用SongList()

现在,您要做的是呈现一个在您的适配器中没有任何元素的列表。 试试这个

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.song_layout, container, false);
recyclerView = (RecyclerView) v.findViewById(R.id.recycler_View);

// mAdapter = new MoviesAdapter(songs);
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
mAdapter=new SongAdapter();
SongList();
recyclerView.setAdapter(mAdapter);
return v;
}

还有一件事。!如果你能帮忙的话。。我的回收器视图已准备就绪。但当我将其上下滚动时,在回收器视图的项目之间会创建一个空间。!!为什么会这样@法汉·帕特尔