Lo que quiero lograr es que si pudiera detectar una cadena dentro de un elemento de vista de reciclador, inflaría algo después y antes de que se muestre el siguiente elemento de vista de reciclador.

0
Nico Dioso 18 ene. 2018 a las 10:12

3 respuestas

La mejor respuesta

Por ejemplo, como si tuviera la clase CustomObject. Tome boolean (isCustomView) para agregar un diseño personalizado.

public class YourObject {
String customString ="";
boolean isCustomView=false;

public String getCustomString() {
    return customString;
}

public void setCustomString(String customString) {
    this.customString = customString;
}

public boolean isCustomView() {
    return isCustomView;
}

public void setCustomView(boolean customView) {
    isCustomView = customView;
}

}

Antes de enviar datos al adaptador, realice estos cambios en sus datos

 ArrayList<YourObject> yourObjectArrayList = new ArrayList<>();

    // Assume You have yourObjectArrayList with data filled

    // Take temp object 
    YourObject object = new YourObject();
    object.setCustomView(true);

    for (int i = 0; i < yourObjectArrayList.size(); i++) {
        if(yourObjectArrayList.get(i).getCustomString().equals("YOUR CUSTOM STRING")){

            // Adding a custom object before That Position
            if (i==0)
                yourObjectArrayList.add(0,object);
            else
                yourObjectArrayList.add(i-1,object);

            // Adding a custom object After That Position. Note here i+2 is a must
            yourObjectArrayList.add(i+2,object);
        }
    }
    // Add data to RecyclerView adapter & notify

Reemplazar getItemViewType () en el adaptador de reciclador

@Override
public int getItemViewType(int position) {
    return (yourObjectArrayList.get(position).isCustomView()) ? R.layout.your_custom_layout : R.layout.your_raw_layout;
}

Realice los siguientes cambios para anular el método onCreateViewHolder

 @Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView;


    if(viewType == R.layout.your_custom_layout){
        itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.your_custom_layout, parent, false);
    }
    else {
        itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.your_raw_layout, parent, false);
    }

    return new ViewHolder(itemView);

}
1
Mitesh Nandpal 18 ene. 2018 a las 10:42

Puede usar el método de anulación int getItemViewType(int); de la clase RecyclerView.Adapter<>.

@Override
public int getItemViewType(int position){
    if (data.get(position).contains("Your string"))
        return 007; // any random integer you can use
    return super.getItemViewType(position);
}

Y en el método onCreateViewHolder

@Override
public void onCreateViewHolder(ViewGroup parent, int viewType){
    if (viewType == 007){ // the view type you returned
        return #special_view // inflate your other layout here which you want to inflate if it contains your special string.
    else 
        return #normal_view;// inflate the normal view here and return
    }
}
1
Geet Choubey 18 ene. 2018 a las 09:15
holder.dynamicLinearLayout.removeAllViews()
View view = LayoutInflater.from(context).inflate(R.layout.new_layout,null);
holder.dynamicLinearLayout.addView(view);

Prueba esto en onBind

0
Anindya Pal 18 ene. 2018 a las 10:16
48315652