Java RecyclerView项仅显示一个背景的文本
我刚刚创建了一个recycler视图,其中包含一个文本和一个复选框,我认为我为这个recycler项目创建了一个适配器 适配器类Java RecyclerView项仅显示一个背景的文本,java,android,Java,Android,我刚刚创建了一个recycler视图,其中包含一个文本和一个复选框,我认为我为这个recycler项目创建了一个适配器 适配器类 package abtech.waiteriano.com.waitrer.adapters; /** * Created by dell on 7/13/2017. */ import android.content.Context; import android.support.v7.widget.CardView; import android.s
package abtech.waiteriano.com.waitrer.adapters;
/**
* Created by dell on 7/13/2017.
*/
import android.content.Context;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import abtech.waiteriano.com.waitrer.R;
import cn.refactor.library.SmoothCheckBox;
public class ItemModifierAdapter extends RecyclerView.Adapter<ItemModifierAdapter.ItemModifierVierHolder> {
private Context mContext;
static ArrayList<ItemModifierModel> itemModifierModels;
static ArrayList<Boolean> positionArray;
public ItemModifierAdapter(Context context, ArrayList<ItemModifierModel> itemModifierModels) {
mContext = context;
this.itemModifierModels = itemModifierModels;
positionArray = new ArrayList<Boolean>(itemModifierModels.size());
for (int i = 0; i < itemModifierModels.size(); i++) {
positionArray.add(false);
}
}
public static class ItemModifierVierHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
CardView cv;
Context c;
TextView itemName, modifierName;
SmoothCheckBox Iv1;
private SparseBooleanArray selectedItems;
RelativeLayout RV1;
private Context mContext;
ItemModifierVierHolder(View itemView) {
super(itemView);
cv = (CardView) itemView.findViewById(R.id.cv);
Iv1 = (SmoothCheckBox) itemView.findViewById(R.id.iv1);
modifierName = (TextView) itemView.findViewById(R.id.modifierItemNameTv);
RV1 = (RelativeLayout) itemView.findViewById(R.id.rv1);
//set OnclickListener
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
int position = getAdapterPosition();
Iv1.toggle();
Iv1.mTickDrawing = false;
Iv1.mDrewDistance = 0;
if (Iv1.isChecked()) {
// RV1.setTag(true);
// ` Iv1.setVisibility(View.VISIBLE);
// Iv1.setChecked(false);
positionArray.set(position, true);
Iv1.startCheckedAnimation();
} else {
// Iv1.setVisibility(View.INVISIBLE);
// Iv1.setChecked(true);
positionArray.set(position, false);
Iv1.startUnCheckedAnimation();
// RV1.setTag(null);
}
Toast.makeText(itemView.getContext(), "Position: " + itemModifierModels.get(Integer.parseInt(getAdapterPosition() + "")).getSer(), Toast.LENGTH_LONG).show();
}
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
@Override
public ItemModifierVierHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_modifier, viewGroup, false);
ItemModifierVierHolder imvh = new ItemModifierVierHolder(v);
return imvh;
}
@Override
public void onBindViewHolder(ItemModifierVierHolder itemModifierVierHolder, final int position) {
for (int i = 0; i < itemModifierModels.get(position).modifierName.length; i++) {
if (i == 0)
itemModifierVierHolder.modifierName.setText(itemModifierModels.get(position).modifierName[i]);
else
itemModifierVierHolder.modifierName.setText(itemModifierVierHolder.modifierName.getText().toString() + "\n" + itemModifierModels.get(position).modifierName[i]);
}
// itemModifierVierHolder.modifierName.setText(itemModifierModels.get(position).modifierName[0]);
itemModifierVierHolder.RV1.setFocusable(false);
itemModifierVierHolder.Iv1.setChecked(positionArray.get(position));
}
@Override
public int getItemCount() {
return itemModifierModels.size();
}
}
但它只显示一个这样的文本
我所需要的是,我想展示其他的文本,我也需要这些文本展示在彼此的后面和下面
我要为这些文本制作另一个适配器和型号吗
我想用相同的文本视图创建类似这样的重复文本,但名称不同
希望这会很清楚
onBindViewHolder
你把这个
itemModifierVierHolder.modifierName.setText(itemModifierModels.get(position).modifierName[0]);
由于您通过执行modifierName[0]
来显式设置单个修饰符,因此它显示了单个条目
如果要动态添加更多文本视图,请使用另一个布局包装
modifierName
TextView。之后,您可以使用每个modifierName
项动态添加文本视图。我有一个难看的解决方案,请尝试ItemModifierVierHolder创建一个子回收视图,然后为每个子数据项添加一个复选框+文本视图请检查我的解决方案,希望它能帮助您:
package com.app.practiceapp;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] namesArray1 = new String[]{"Cupcake", "Donut", "Eclair", "Froyo"};
Model model1 = new Model();
model1.setNamesArray(namesArray1);
String[] namesArray2 = new String[]{"Gingerbread", "Honeycomb", "Ice Cream Sandwich", "Jelly Bean"};
Model model2 = new Model();
model2.setNamesArray(namesArray2);
String[] namesArray3 = new String[]{"Kitkat", "Lollipop", "Marshmallow", "Nougat"};
Model model3 = new Model();
model3.setNamesArray(namesArray3);
String[] namesArray4 = new String[]{"Prashant", "Android", "Developer"};
Model model4 = new Model();
model4.setNamesArray(namesArray4);
ArrayList<Model> modelList = new ArrayList<>();
modelList.add(model1);
modelList.add(model2);
modelList.add(model3);
modelList.add(model4);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(new MyAdapter(modelList));
}
class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private ArrayList<Model> modelList;
MyAdapter(ArrayList<Model> myList) {
this.modelList = myList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new MyViewHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.item_recyclerview, parent, false));
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
for (int i = 0; i < modelList.get(position).getNamesArray().length; i++) {
TextView textView = new TextView(MainActivity.this);
textView.setGravity(Gravity.CENTER);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(10, 10, 10, 10);
textView.setLayoutParams(layoutParams);
textView.setPadding(10, 10, 10, 10);
textView.setBackgroundColor(ContextCompat.getColor(MainActivity.this, android.R.color.holo_blue_light));
textView.setTextColor(ContextCompat.getColor(MainActivity.this, android.R.color.white));
textView.setText(modelList.get(position).namesArray[i]);
holder.itemContainerLayout.addView(textView);
}
}
@Override
public int getItemCount() {
return modelList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private final LinearLayout itemContainerLayout;
public MyViewHolder(View itemView) {
super(itemView);
itemContainerLayout = (LinearLayout) itemView.findViewById(R.id.containerLayout);
}
}
}
class Model {
private String[] namesArray;
public void setNamesArray(String[] namesArray) {
this.namesArray = namesArray;
}
public String[] getNamesArray() {
return namesArray;
}
}
}
package com.app.practiceapp;
导入android.os.Bundle;
导入android.support.v4.content.ContextCompat;
导入android.support.v7.app.AppActivity;
导入android.support.v7.widget.LinearLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入android.view.Gravity;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.LinearLayout;
导入android.widget.TextView;
导入java.util.ArrayList;
公共类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
字符串[]名称数组1=新字符串[]{“纸杯蛋糕”、“甜甜圈”、“Eclair”、“Froyo”};
模型1=新模型();
model1.setNamesArray(namesArray1);
String[]namesArray2=新字符串[]{“姜饼”、“蜂窝”、“冰淇淋三明治”、“果冻豆”};
模型2=新模型();
model2.setNamesArray(namesArray2);
String[]namesArray3=新字符串[]{“Kitkat”、“棒棒糖”、“棉花糖”、“牛轧糖”};
模型3=新模型();
model3.setNamesArray(namesArray3);
String[]namesArray4=新字符串[]{“Prashant”、“Android”、“Developer”};
模型4=新模型();
model4.setNamesArray(namesArray4);
ArrayList modelList=新的ArrayList();
添加(model1);
添加(model2);
添加(model3);
添加(model4);
RecyclerView RecyclerView=(RecyclerView)findViewById(R.id.RecyclerView);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
setAdapter(新的MyAdapter(modelList));
}
类MyAdapter扩展了RecyclerView.Adapter{
私有ArrayList模型列表;
MyAdapter(ArrayList myList){
this.modelList=myList;
}
@凌驾
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
返回新的MyViewHolder(LayoutInflater.from(MainActivity.this)。充气(R.layout.item_recyclerview,parent,false));
}
@凌驾
公共无效onBindViewHolder(MyViewHolder,int位置){
对于(int i=0;i
以下是主要的活动布局xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.app.practiceapp.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/containerLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:gravity="center"
android:orientation="horizontal"
android:padding="10dp">
</LinearLayout>
你所说的其他文本是什么意思?在对方身后呢?你能解释一下吗bit@kapsym我假设在字符串[]中添加了多个文本,就像我发布我只显示一个文本我想显示我添加的所有文本,但每个文本都显示在另一个文本视图中,而不是在同一个文本视图中,只想在onBindViewHolder()内的行中显示它们,您已经创建了一个动态文本视图,并在其中设置文本。你为什么这么做?@Prashant我为它设置了文本,因为它显示了数据库中的一些文本,我想用不同的名称重复这些文本,就像从数据中得到的一样base@Nativony但是TextView没有在任何地方使用。我的意思是它没有添加到任何位置的视图中。对不起,您的意思是创建另一个布局并将此文本视图放入此布局并在同一适配器中为此布局创建另一个布局输出充气器并在同一适配器中创建另一个视图,并将此新布局的视图设置为父布局?否,我的意思是在这里声明一个布局,并将您在循环中创建的动态文本视图添加到该布局中,而不是modifierItemNameTv
。看看这个。顺便说一下,我不需要动态添加此文本,请检查我的适配器类我编辑了它您的经验
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.app.practiceapp.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/containerLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:gravity="center"
android:orientation="horizontal"
android:padding="10dp">
</LinearLayout>