Итак, у меня есть представление карты, созданное следующим образом:
<?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 предметов из моих 3 TextView, а затем продолжает создавать новые карточки, содержащие до 3 предметов, чтобы показать мне остальные.
Что я хотел бы сделать, так это использовать «временную шкалу» textview в качестве заголовка, а затем динамически добавлять контент для «заголовка» textview Только. Так, например, у меня может быть карта с 1 «временной шкалой» TextView, 0, 2, 5 и т. д. «название» TextView, 1 «веб-сайт» TextView
Это то, что можно сделать с помощью CardView? Если да, я был бы признателен за любые полезные указатели, которые помогут мне начать работу.




Если я правильно понял вопрос, что вы хотите поставить динамически только часть данных. Таким образом, в держателе bindView привязывается только динамическая часть, которая является статической, которую вы можете жестко закодировать в файле xml со строковым значением.
Преобразуйте свой 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 добавьте динамические TextViews к заголовку:
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();
}
да, помогло спасибо! Просто краткое примечание для вашего примера, вам также нужно добавить частный заголовок LinearLayout;