Recycler View和Card View不显示卡片

时间:2016-12-11 05:27:42

标签: java android android-layout android-studio

这是我的活动:

public String id;
public String passPhrase;
public ArrayList<SongCell> songs;

private RecyclerView recyclerView;
private MyAdapter myAdapter;
private RecyclerView.LayoutManager layoutManager;


@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.songs_view_layout);

    Context context = this.getApplicationContext();
    Bundle stateData = getIntent().getExtras();

    try
    {
        id = stateData.getString("id");
        passPhrase = stateData.getString("passPhrase");

        ArrayList data;

        recyclerView = (RecyclerView) findViewById(R.id.song_list);
        recyclerView.setHasFixedSize(true);

        layoutManager = new LinearLayoutManager(this);

        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());

        data = new ArrayList<SongCell>();

        for (int i=0; i<5;i++)
        {
            data.add(new SongCell("Song "+i,"Artist "+i, null));
        }


        myAdapter = new MyAdapter(data);
        recyclerView.setAdapter(myAdapter);

    }
    catch(Exception e)
    {
        Log.d("Error: ", e.toString());
    }

}

card.xml

<android.support.v7.widget.CardView android:layout_width="fill_parent"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="6dp"
        >

        <ImageView
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:id="@+id/song_photo"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginRight="16dp"
            android:background="@drawable/error" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/song_name"
            android:textSize="30sp"
            android:text="Song Name"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true"
            android:textColor="#000000" />

        <ImageButton
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:id="@+id/vote_button"
            android:layout_alignParentRight="true"
            android:layout_marginRight="8dp"
            android:background="@drawable/arrow" />

    </RelativeLayout>

</android.support.v7.widget.CardView>

Activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:background="#2d2d2d">

<TableLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:paddingBottom="30dp"
        android:layout_marginBottom="10dp"
        android:background="#222222"></TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:paddingBottom="10dp">

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center">

            <ImageView
                android:layout_width="70dp"
                android:layout_height="70dp"
                android:id="@+id/featSongImage1"
                android:contentDescription="@string/newsongimage"
                android:background="@drawable/error" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:text="@string/songname"
                android:id="@+id/featSongName1" />

            <ImageButton
                android:layout_width="25dp"
                android:layout_height="25dp"
                android:id="@+id/featSongButt1"
                android:background="@drawable/arrow"
                android:contentDescription="@string/votearrow" />
        </LinearLayout>

    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:foregroundGravity="fill_horizontal"
        android:gravity="fill_horizontal|center">




        <android.support.v7.widget.RecyclerView
            android:id="@+id/song_list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center_horizontal" />


    </TableRow>
</TableLayout>
</LinearLayout>

这是我的自定义适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>
{
private ArrayList<SongCell> data;

public MyAdapter(ArrayList<SongCell> dataI)
{
    data = dataI;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType)
{
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.song_card,viewGroup,false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(ViewHolder viewholder, int pos) {
    viewholder.songName.setText(data.get(pos).getName());
    viewholder.artist.setText(data.get(pos).getArtist());
    viewholder.image.setImageBitmap(data.get(pos).getArtwork());
}

@Override
public int getItemCount() {
    return 0;
}

@Override
public int getItemViewType(int position) {
    return 0;
}

public class ViewHolder extends RecyclerView.ViewHolder
{
    TextView songName;
    TextView artist;
    ImageView image;
    ImageButton voteButton;

    public ViewHolder(View v)
    {
        super(v);
        this.songName = (TextView) v.findViewById(R.id.song_name);
        this.image = (ImageView) v.findViewById(R.id.song_photo);
        this.voteButton = (ImageButton) v.findViewById(R.id.vote_button);
    }
}

}

我已经看了很多关于如何使这项工作的指南,但它仍然无法运作。任何人都知道发生了什么?我在25.0.1版本上,并导入了所有模块。但它并没有在布局中添加一张卡片。

1 个答案:

答案 0 :(得分:1)

我认为调试你上传的这么大的代码会很困难。但幸运的是,我的眼睛就在这条线上了

@Override
public int getItemCount() {
    return 0;
}
适配器中的

return 0;

您的列表大小始终为0.

而不是写这个

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

EDIT-1:
你也会在这里获得空指针异常

viewholder.artist.setText(data.get(pos).getArtist());

因为您没有初始化artist中的ViewHolder class变量。

编辑-2

@Override
public int getItemCount() {
    return 0;
}

您可以从适配器中删除此特定代码。因为重写我们不使用的类的方法有时可能会导致您甚至无法想象的错误。