如何仅在按下按钮时重新加载recyclerview?

问题描述 投票:0回答:2

我有一个活动,有一些回收者意见,但只有一个很重要。我希望这个rec​​yclerview每次我参加活动时都不要自动上传信息。我已经调用了用于使其刷新pickEntidad的方法,并且我想将此方法放在if内,如果按下此按钮,则在另一个方法内,将调用pickEntidad方法,否则将什么也不会发生并且信息recyclerview将显示的将是上次刷新时显示的。

我尝试将名为cambiarmenu的按钮放在if内,但这些按钮仅接受布尔值。这就是为什么我试图在按下按钮时将变量值设置为1,然后在if中使用此变量的原因,但是我没有正确地做到这一点。 (我将此方法称为Clicado)

我在这里给您java.file的代码。

public class Comida2 extends AppCompatActivity implements Adaptador2.OnRecipeListener {
    private RecyclerView recyclerView1;
    List<Entidad2> listItems;
    Adaptador2 adaptor;
    private Entidad2 entidad1,entidad2,entidad3;
    Button cambiarmenu;


    @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);

        cambiarmenu = (Button) findViewById(R.id.boton_cambiarmenu);

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

    @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 Clicado(){

        final boolean[] numerillo = new boolean[1];

        cambiarmenu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                numerillo[0] = true;
            }
        });

            if (numerillo[0]) {
            pickEntidad();
        }
    }

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

[如果有人知道该怎么做,请帮助我。如果您需要更多代码,请询问。

感谢。

java android android-studio
2个回答
0
投票

我不确定我是否正确理解了您的想法。

  1. recyclerview1显示的开头没有任何项目。
  2. 当您单击布局中的R.id.lv_1按钮时,通过pickEntidad()方法根据随机优先级,在recyclerview中填充entidad1〜3中的随机项。
  3. 如果再次单击此按钮,则将在回收站视图中填充上面新选择的随机项目。
  4. 如果单击列出的项目之一,则根据您的选择进行另一项活动。

据我了解,这是我的解决方案。

public class Comida2 extends AppCompatActivity implements Adaptador2.OnRecipeListener {
    private RecyclerView recyclerView1;
    List<Entidad2> listItems;
    Adaptador2 adaptor;
    private Entidad2 entidad1,entidad2,entidad3;
    Button cambiarmenu;


    @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);

        cambiarmenu = (Button) findViewById(R.id.boton_cambiarmenu);

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


        /* Do not fill listItems here yet. */

        // listItems.add(entidad1);
        // listItems.add(entidad2);
        // listItems.add(entidad3);

        adaptor = new Adaptador2(listItems, this);
        recyclerView1.setAdapter(adaptor);
        adaptor.notifyDataSetChanged();


        /* Clicado() method is useless in your mechanism */

        cambiarmenu.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            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();
    }
}

0
投票

您可以通过检查适配器中的物品计数来检查您的回收站视图中是否有物品。如果其为空或为空,则将项目添加到您的recyclerview。否则,什么也不要做。您的刷新按钮应具有pickEntidad()方法来刷新;

//if list is empty add items
if (youradapter.itemCount == null || youradapter.itemCount == 0){
    pickEntidad ()
}

yourRefreshButton.setOnClickListener(new View.OnClickListener() {
      @Override public void onClick(View view) {
          pickEntidad()
      }
    });
© www.soinside.com 2019 - 2024. All rights reserved.