RecyclerView项目显示文本只有一个背景

问题描述:

我刚刚创建了一个回收视图包含文本和一个复选框,我认为,我创建了这个回收站项目 适配器类RecyclerView项目显示文本只有一个背景

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(); 
    } 
} 

适配器,并将此项目在一个String []

Modifiers = new ArrayList<>(); 
Modifiers.add(new ItemModifierModel(1,(new String []{"Roomy Roll","Kiri Roll","Roomy Roll","Eggs Roll","Modifier 5","Modifier 6"}))); 
Modifiers.add(new ItemModifierModel(16, (new String []{"Eggs Roll"}))); 
Modifiers.add(new ItemModifierModel(23,(new String []{"Kiri Roll"}))); 
Modifiers.add(new ItemModifierModel(43,(new String []{"Roomy Roll"}))); 
Modifiers.add(new ItemModifierModel(50,(new String []{"Roomy Roll"}))); 
Modifiers.add(new ItemModifierModel(56,(new String []{"Kiri Roll"}))); 
Modifiers.add(new ItemModifierModel(63,(new String []{"Kiri Roll"}))); 
Modifiers.add(new ItemModifierModel(73,(new String []{"Eggs Roll"}))); 
Modifiers.add(new ItemModifierModel(80,(new String []{"Eggs Roll"}))); 

,这是我的模型

package abtech.waiteriano.com.waitrer.adapters; 

/** 
* Created by dell on 7/13/2017. 
*/ 

public class ItemModifierModel { 

    String[] modifierName; 
    int ser; 

    ItemModifierModel(int ser, String[] modifierName) { 

     this.modifierName = modifierName; 
     this.ser = ser; 
    } 

    public String[] getModifierName() { 
     return modifierName; 
    } 




    public int getSer() { 
     return ser; 
    } 


} 

但它只显示了这样一个文本 enter image description here 我需要的一切我想要显示其他文本,并且我还需要这些文本显示在彼此之后和彼此之间 我应该为这些文本创建另一个适配器和模型吗?

我想创造这样具有相同文本的看法,但有不同的名称 enter image description here 希望这种重复文本本会是清楚

+0

你是什么意思的其他文本?并在对方后面?你能解释一下 –

+0

@kapsym我认为添加了多个文本在字符串[]像我发布我只显示一个文本我想显示我添加的所有文本,但每个文本显示在另一个文本视图不在同一文本查看,只是想连续显示它们 – Nativony

+0

在onBindViewHolder()中,你已经创建了一个动态的TextView,并在其中设置了文本。你为什么这样做? – Prashant

请检查我的解决方案,希望它可以帮助你:

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; 
    } 


} 
} 

这里的主要活动布局的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:

<?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> 

请让我知道它是否有助于您的要求。

enter image description here

+0

非常感谢,这正是我所需要的 – Nativony

+0

@Nativony如果您对答案满意,您可以投票回答。 – Prashant

onBindViewHolder你把这个

itemModifierVierHolder.modifierName.setText(itemModifierModels.get(position).modifierName[0]); 

既然你明确通过执行modifierName[0]来设置单个修改器,从而显示单个条目。

如果您想要动态添加更多TextView,然后将modifierName TextView换成其他布局。之后,您可以动态地为每个modifierName项目添加TextView。

+0

对不起,你的意思是创建另一个布局,并把这个布局放在这个文本视图中,并在同一个适配器中为这个布局创建另一个布局,并在同一个适配器和setview中为这个新布局创建另一个视图,父级布局? – Nativony

+0

不,我的意思是代替'modifierItemNameTv'在这里声明一个布局,并将你在循环中创建的那些动态文本视图添加到那里。看看这个。 https://*.com/questions/4203506/how-can-i-add-a-textview-to-a-linearlayout-dynamically-in-android – fluffyBatman

+0

非常感谢我会检查这个 – Nativony

我有一个丑陋的解决方案,尝试ItemModifierVierHolder创建子recyclerView,然后添加一个复选框+ TextView的每个子数据项的