如何制作回收库仅显示一个阵列,具体取决于percantage



我希望一个回收库仅显示一个数组,但在数组列表中包含更多数组。必须显示的一个并不总是相同的,但这将取决于一些百分比。

例如:第一个阵列具有20%的机会,第二阵列50%和第三次50%。并且将显示一个。但是当我刷新屏幕时,它将更改。

我想我应该做的是将百分比设置为阵列列表上的每个数组,但是我不知道该怎么做,下一步该做什么。

那是我的java文件。


public class Comida extends AppCompatActivity implements Adaptador2.OnRecipeListener {
    private RecyclerView recyclerView1;
    List<Entidad2> listItems;
    Adaptador2 adaptor;
    private Entidad2 entidad1,entidad2,entidad3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_comida);
        recyclerView1 = findViewById(R.id.lv_1);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView1.setLayoutManager(layoutManager);
        listItems = new ArrayList<>();
        entidad1 = new Entidad2(R.drawable.calabacines_3, "Solomillo a la plancha", " 10 min.", 4, 20);
        entidad2 = new Entidad2(R.drawable.patatas_deluxe_especiadas_70523_300_150, "Entrecot", " 15 min.", 2, 50);
        entidad3 = new Entidad2(R.drawable.tomate, "Hamburguesa", " 2 min.", 5, 100);

        listItems.add(entidad1);
        listItems.add(entidad2);
        listItems.add(entidad3);
        adaptor = new Adaptador2(listItems, this);
        recyclerView1.setAdapter(adaptor);
        adaptor.notifyDataSetChanged();
        pickEntidad();
    }
    @Override
    public void OnRecipe(int priority) {
        if (priority == 20) {
            Intent in = new Intent(this, Solomillo.class);
            startActivity(in);
        }
        if (priority == 50) {
            Intent in = new Intent(this, Entrecot.class);
            startActivity(in);
        }
        if (priority == 100) {
            Intent in = new Intent(this, Hamburguesa.class);
            startActivity(in);
        }
    }
    private void pickEntidad(){
        final int random = new Random().nextInt(101);
        int priority1 = entidad1.getPriority();
        int priority2 = entidad2.getPriority();
        int priority3 = entidad3.getPriority();

        listItems.clear();
        if(random < priority1){
            listItems.add(entidad1);
        }else if(random < priority2){
            listItems.add(entidad2);
        }else if (random <= priority3){
            listItems.add(entidad3);
        }
        adaptor.notifyDataSetChanged();
    }
}

那是适配器:


public class Adaptador  extends RecyclerView.Adapter<Adaptador.ViewHolder> //implements View.OnClickListener
{
    private List<Entidad> listItems;
    private OnRecipeListener mOnRecipeListener;
    public  Adaptador(List<Entidad> listItems, OnRecipeListener onRecipeListener) {
        this.listItems = listItems;
        this.mOnRecipeListener = onRecipeListener;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.elemento_lista, parent, false);
        //view.setOnClickListener(this);
        return new ViewHolder(view, mOnRecipeListener);
    }
    @Override
    public void onBindViewHolder(ViewHolder viewholder, int position) {
        int resource = listItems.get(position).getImgFoto();
        String title = listItems.get(position).getTitulo();
        String time = listItems.get(position).getTiempo();
        int barra = listItems.get(position).getRating();
        int fondo = listItems.get(position).getColorfondo();
        viewholder.setData(resource, title, time, barra, fondo);
    }
    @Override
    public int getItemCount() {
        return listItems.size();
    }
    class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        private ImageView imgFoto;
        private TextView titulo;
        private TextView tiempo;
        private RatingBar ratingBar;
        private ImageView colorfondo;
        OnRecipeListener onRecipeListener;
        public ViewHolder(View itemView, OnRecipeListener onRecipeListener) {
            super(itemView);
            imgFoto = itemView.findViewById(R.id.imgFoto);
            titulo = itemView.findViewById(R.id.tvTitulo);
            tiempo = itemView.findViewById(R.id.tvTiempo);
            ratingBar = itemView.findViewById(R.id.ratingBarVerd);
            colorfondo = itemView.findViewById(R.id.colorfondo);
            this.onRecipeListener = onRecipeListener;
            itemView.setOnClickListener(this);
        }
        private void setData(int resource, String title, String time, int barra, int fondo){
            imgFoto.setImageResource(resource);
            titulo.setText(title);
            tiempo.setText(time);
            ratingBar.setRating(barra);
            colorfondo.setImageResource(fondo);
        }
    @Override
    public void onClick(View v) {
        onRecipeListener.OnRecipe(getAdapterPosition());
    }
}
    public interface OnRecipeListener{
        void OnRecipe(int position);
    }
}

这里有entidad文件:


public class Entidad2 {
    private int imgFoto;
    private String titulo;
    private String tiempo;
    private int ratingBar;
    private int colorfondo;
    public Entidad2(int imgFoto, String titulo, String tiempo, int ratingBar, int colorfondo) {
        this.imgFoto = imgFoto;
        this.titulo = titulo;
        this.tiempo = tiempo;
        this.ratingBar = ratingBar;
        this.colorfondo = colorfondo;
    }
    public int getImgFoto() {
        return imgFoto;
    }
    public String getTitulo() {
        return titulo;
    }
    public String getTiempo() {
        return tiempo;
    }
    public int getRating() { return ratingBar; }
    public int getColorfondo() {
        return colorfondo;
    }
}

请如果有人对如何做,请告诉我。如果您需要更多代码,请告诉我

谢谢。

在此处输入图像描述

在这里@emir查看它是否在内部

public class Comida extends AppCompatActivity implements Adaptador2.OnRecipeListener {
    private RecyclerView recyclerView1;
    List<Entidad2> listItems;
    private Entidad2 entidad1,entidad2,entidad3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_comida);
        recyclerView1 = findViewById(R.id.lv_1);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView1.setLayoutManager(layoutManager);
        listItems = new ArrayList<>();
        entidad1 = new Entidad2(R.drawable.calabacines_3, "Solomillo a la plancha", " 10 min.", 4, R.drawable.color_carnes, 50));
        entidad2 = new Entidad2(R.drawable.patatas_deluxe_especiadas_70523_300_150, "Entrecot", " 15 min.", 2, R.drawable.color_carnes, 200));
        entidad3 = new Entidad2(R.drawable.tomate, "Hamburguesa", " 2 min.", 5, R.drawable.color_carnes, 350));

        listItems.add(entidad1);
        listItems.add(entidad2);
        listItems.add(entidad3);
        Adaptador2 Adaptador2 = new Adaptador2(listItems, this);
        recyclerView1.setAdapter(Adaptador2);
        Adaptador2.notifyDataSetChanged();
        pickEntidad();
    }
    @Override
    public void OnRecipe(int position) {
        if (position == 0) {
            Intent in = new Intent(this, Solomillo.class);
            startActivity(in);
        }
    }
    private void pickEntidad(){
        final int random = new Random().nextInt(351);
        int priority1 = entidad1.getPriority();
        int priority2 = entidad2.getPriority();
        int priority3 = entidad3.getPriority();

        listItems.clear();
        if(random < priority1){
            listItems.add(entidad1);
        }else if(random < priority2){
            listItems.add(entidad2);
        }else if (random <= priority3){
            listItems.add(entidad3);
        }
        Adaptador2.notifyDataSetChanged();
    }
}

我了解的是,您想随机从entidad列表中显示一个单个Entidad对象,并带有不同的显示机会。

ex:在您的entidad对象上创建一个名为优先级的整数字段。将第一个Entidad的优先级设置为50,第二个200,第三个350.创建以下方法,取决于优先级。

编辑:entidad.java

public class Entidad {
private int imgFoto;
private String titulo;
private String tiempo;
private int ratingBar;
private int colorfondo;
private int priority;
public Entidad(int imgFoto, String titulo, String tiempo, int ratingBar, int colorfondo, int priority) {
    this.imgFoto = imgFoto;
    this.titulo = titulo;
    this.tiempo = tiempo;
    this.ratingBar = ratingBar;
    this.colorfondo = colorfondo;
    this.priority = priority;
}
public int getRatingBar() {
    return ratingBar;
}
public int getPriority() {
    return priority;
}
public int getImgFoto() {
    return imgFoto;
}
public String getTitulo() {
    return titulo;
}
public String getTiempo() {
    return tiempo;
}
public int getRating() { return ratingBar; }
public int getColorfondo() {
    return colorfondo;
}
}

编辑2:使用getentidad((

public class Comida extends AppCompatActivity implements Adaptador.OnRecipeListener {
private RecyclerView recyclerView1;
List<Entidad> listItems;
Adaptador adaptor;
private Entidad entidad1,entidad2,entidad3;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_comida);
    recyclerView1 = findViewById(R.id.lv_1);
    LinearLayoutManager layoutManager = new 
    LinearLayoutManager(this);
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView1.setLayoutManager(layoutManager);
    listItems = new ArrayList<>();
//Initialize entidad objects and keep references of them to use in pickEntidad() method
   entidad1 = new Entidad(R.drawable.calabacines_3, "Solomillo a la plancha", " 10 min.", 4, R.drawable.color_carnes,50);
   entidad2 = new Entidad(R.drawable.patatas_deluxe_especiadas_70523_300_150, "Entrecot", " 15 min.", 2, R.drawable.color_carnes,200);
    entidad3 = new Entidad(R.drawable.tomate, "Hamburguesa", " 2 min.", 5, R.drawable.color_carnes,350);
    listItems.add(entidad1);
    listItems.add(entidad2); 
    listItems.add(entidad3);
    adaptor = new Adaptador(listItems, this);
    recyclerView1.setAdapter(adaptador);
    adaptor.notifyDataSetChanged();
//Call pickEntidad() to randomly pick one entidad and show on the list
    pickEntidad();
}
@Override
public void OnRecipe(int position) {
    if (position == 0) {
        Intent in = new Intent(this, Solomillo.class);
        startActivity(in);
    }
}
private void pickEntidad(){
//Generates random int value between 0-350
final int random = new Random().nextInt(351);
//get priorities from your created Entidad objects.
int priority1 = entidad1.getPriority();
int priority2 = entidad2.getPriority();
int priority3 = entidad3.getPriority();

listItems.clear()
//Pick one randomly depending on priority
if(random < priority1){
listItems.add(entidad1)
}else if(random < priority2){
listItems.add(entidad2)
}else if (random <= priority3){
listItems.add(entidad3)
}
//update your adapter
adaptor.notifyDataSetChanged()
}
}

每次您要刷新列表时,请调用此pickentidad((方法。但是,这是一种硬编码的方法,如果您有太多项目并且不知道优先级值或范围,那将是没有用的。您还可以通过在0-351之间生成INT来随机设置项目优先级。希望我正确理解您的问题。

另外,不要给带有后者的变量名称。将您的"适配器"变量更改为"适配器"

最新更新