java - 仅在按下按钮时如何使recyclerview重新加载?
问题描述
我有一些 recyclerviews 的活动,但只有一个很重要。我希望这个 recyclerview 不会在我每次进入活动时自动上传信息。我已经调用了用来让它刷新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();
}
}
如果有人知道该怎么做,请帮助我。如果您需要更多代码,请询问。
谢谢。
解决方案
我不确定我是否正确理解了您的想法。
recyclerview1
开始时没有任何项目显示。- 当您
R.id.lv_1
在布局中单击按钮时,recyclerview 会按照方法的随机优先级填充 entidad1~3 中的随机项pickEntidad()
。 - 如果再次单击此按钮,recyclerview 将填充新拾取的随机项目,如上所示。
- 如果您单击列出的项目之一,您将根据您的选择进入另一项活动。
只要我理解,这就是我的解决方案。
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();
}
}
推荐阅读
- java - Hibernate 将数字(保存十进制值)数据类型从 DB 映射到 Java 中的 Long
- eclipse-rse - 在 RSE 中如何创建系统过滤器
- verilog - 如何理解 Cadence XMVLOG 编译器支持哪个 SystemVerilog?
- django - 使用 gmail 作为客户端(django、石墨烯)发送电子邮件失败
- c# - 如何获取wopi主机集成的file_id?
- highcharts - 如何在 xAxis 格式化程序上放置 highcharts 符号?
- mongodb - 检查 mongodb 连接字符串在 asp.net 核心中是否有效
- python - Python - 请求 - POST 有效负载
- reactjs - 启动使用 create-react-app 引导的反应应用程序时出错
- python - 在 Python 中解析非零填充的 12 小时日期时间格式