因此,我具有如下创建的卡片视图:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/timeline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp" />
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:textStyle="bold" />
<TextView
android:id="@+id/website"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp" />
</LinearLayout>
在我的适配器类中,我具有以下代码来填充卡视图。
public class MyViewHolder extends RecyclerView.ViewHolder {
private TextView tv_title, tv_timeline, tv_website;
public MyViewHolder(View view) {
super(view);
tv_title = (TextView) view.findViewById(R.id.title);
tv_timeline = (TextView) view.findViewById(R.id.timeline);
tv_website = (TextView) view.findViewById(R.id.website);
}
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.activity_row_data, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.tv_title.setText(mTitleList.get(position));
holder.tv_timeline.setText(mtimelineList.get(position));
holder.tv_website.setText(mSiteSrc.get(position));
}
@Override
public int getItemCount() {
return mTitleList.size();
}
这正确地显示了我期望的输出。问题是,CardView
最多只能向我显示3个TextView
中的3个项目,然后继续创建更多卡片,最多可以显示3个项目来向我显示其余的项目。
我想做的是使用textview“时间轴”作为标题,然后动态地仅为仅添加textview“ title”的内容。因此,例如,我可能有一张卡片,其中包含1个“时间轴” TextView
,0、2、5等“标题” TextView
,1个“网站” TextView
这是CardView可以完成的吗?如果是的话,我将不胜感激任何帮助我入门的有用指示。
答案 0 :(得分:0)
如果我理解正确,那么您只想动态放置部分数据的问题。因此,在bindView Holder中,仅绑定静态的动态部分,您可以使用字符串值将其硬编码到xml文件中。
答案 1 :(得分:0)
转换您的xml:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/timeline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp" />
<LienarLayout
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:orientation="vertical"/>
<TextView
android:id="@+id/website"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp" />
</LinearLayout>
现在在您的onBindViewHolder中将动态TextView添加到标题:
public class MyViewHolder extends RecyclerView.ViewHolder {
private TextView tv_timeline, tv_website;
private LinearLayout title;
public MyViewHolder(View view) {
super(view);
title = (LinearLayout) view.findViewById(R.id.title);
tv_timeline = (TextView) view.findViewById(R.id.timeline);
tv_website = (TextView) view.findViewById(R.id.website);
}
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.activity_row_data, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.tv_timeline.setText(mtimelineList.get(position));
holder.tv_website.setText(mSiteSrc.get(position));
for(int i = 0; i < 5; i++) { // 5 is the count how many times you want to add textview
LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
TextView tv=new TextView(holder.title.getContext());
tv.setLayoutParams(lparams);
tv.setText("test = "+i);
holder.title.addView(tv);
}
}
@Override
public int getItemCount() {
return mTitleList.size();
}