Android CardView不显示内容

时间:2015-01-09 22:34:04

标签: android android-appcompat android-recyclerview android-cardview

我想简单地将TextView放在CardView内,但无济于事。我需要做的就是在两个CardViews中出现两个数字。目前,使用下面的代码,会出现两个CardViews,但不会在其中显示任何文字/内容。

我尝试了很多不同的组合,但似乎都没有工作!将TextView置于LinearLayout内不起作用,也不会使其成为CardView的直接子项。

这是我目前的代码:

calendar_view.xml

<?xml version="1.0" encoding="utf-8"?>
<hoo.box.facecalendar.SquareCardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    card_view:cardCornerRadius="4dp"
    card_view:cardUseCompatPadding="true"
    android:id="@+id/calendar_view_card"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

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

        <TextView
            android:id="@+id/calendar_view_day"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:gravity="center"
            android:singleLine="true"
            android:textColor="@color/primary_text"/>

    </RelativeLayout>

</hoo.box.facecalendar.SquareCardView>

SquareCardView.java

public class SquareCardView extends CardView {
    public SquareCardView(Context context) {
        super(context);
    }

    public SquareCardView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SquareCardView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        final int width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
        setMeasuredDimension(width, width);
    }
}

CalendarAdapter.java

public class CalendarAdapter extends RecyclerView.Adapter<CalendarAdapter.CalendarViewHolder> {
    private LayoutInflater inflater;
    private Date curDate;
    private List<Date> dateList;

    public CalendarAdapter(Context context) {
        inflater = LayoutInflater.from(context);
        curDate = new Date();
        dateList = new ArrayList<Date>();
    }

    @Override
    public CalendarViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = inflater.inflate(R.layout.calendar_view, viewGroup, false);
        CalendarViewHolder viewHolder = new CalendarViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(CalendarViewHolder calendarViewHolder, int i) {
        if (dateList.size() <= i) {
            Date tempDate = new Date(curDate);
            tempDate.addDays(i + 1);
            dateList.add(i, tempDate);
        }
        Date iDate = dateList.get(i);
        calendarViewHolder.TEXTVIEW.setText(Integer.toString(iDate.day));
    }

    @Override
    public int getItemCount() { return dateList.size() + 1; }

    class CalendarViewHolder extends RecyclerView.ViewHolder {
        public final TextView TEXTVIEW;
        public final SquareCardView CARDVIEW;

        public CalendarViewHolder(View itemView) {
            super(itemView);

            TEXTVIEW = (TextView) itemView.findViewById(R.id.calendar_view_day);
            CARDVIEW = (SquareCardView) itemView.findViewById(R.id.calendar_view_card);
        }
    }
}

感谢任何可以帮助我的人!这已经在我身上吃了好几天了!

2 个答案:

答案 0 :(得分:1)

玩了大约3个小时后,我找到了解决方案!问题SquareCardView的{​​{1}}没有调整内部布局边界的大小。以下是我将其改为:

onMeasure()

答案 1 :(得分:0)

您的支持库存在问题,您使用的是cardview。编译的sdk版本和支持lib版本应该相同。

例如: 在build.gradle中

如果compileSdkVersion 23那么

在依赖关系中你应该使用

编译'com.android.support:cardview-v7:23.0.0'

检查build.gradle中的两个版本。

ps:如果你使用支持lib版本24工作室建议你以下

“此支持库不应使用与compilesdkversion(23)不同的版本(24)”

祝你好运!