java - 每次我进入活动时,如何使活动不重新加载/刷新?
问题描述
我有一个活动,我不希望每次进入它时都重新加载。我希望它显示我最后一次进入它的信息。但我也想在另一个活动中有一个按钮来刷新另一个活动,这样当我进入它时,信息就会改变。我说内容会发生变化,因为每次您进入活动时,活动都会显示不同的回收站视图。
那是我的 MainActivity.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();
}
}
这就是我的activityWithButton.java:
public class Menu extends AppCompatActivity {
Button boton_start;
Button boton_refresh;
Button boton_prueba;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
boton_start=(Button) findViewById(R.id.boton_platos);
boton_refresh = (Button) findViewById(R.id.boton_cambiarmenu);
boton_prueba=(Button) findViewById(R.id.boton_menu);
boton_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent in = new Intent(Menu.this,Dishes.class);
startActivity(in);
}
});
boton_prueba.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent in = new Intent(Menu.this,Comida.class);
startActivity(in);
}
});
boton_prueba.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//What to do?
}
});
}
}
请帮助我不知道该怎么办。
谢谢
解决方案
您有两个相当直接的选项,SharedPreferences和SavedInstanceState。
SharedPreferencescontext
,您可以在应用程序中任何可用的地方访问和保存数据,将一key, value
对分配给以后要检索的任何数据。通常,您会希望在某些生命周期事件期间保存数据,例如onStop
在活动返回后在其他地方检索数据:
SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
@Override
public void onStop() {
super.onStop();
editor.putString("key", "My string");
editor.commit();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String myValue = editor.getString("key");
}
SavedInstanceState在您的活动中带有onCreate
覆盖方法。利用可用的覆盖方法onSaveInstanceState
,在活动被临时销毁时传入所需的数据,以便在其重新创建时检索。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
String myValue = savedInstanceState.getString("key");
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString("key", "My string");
super.onSaveInstanceState(outState);
}
进一步阅读https://developer.android.com/guide/components/activities/activity-lifecycle
推荐阅读
- matrix - 可以用 scale + rotate3d 替换 skew
- aem - AEM 使用 HTL 的不同方式
- linux - os.Stdout 和 os.File 有什么区别
- rust - FnOnce 的泛型,返回具有生命周期的未来
- oracle19c - Oracle 数据泵导入 TSTZ 版本
- kubernetes - kubectl - 如何使用基本身份验证从 url 创建资源
- yii2 - yii2 - 多行从一个表单加载到同一个表中
- node.js - 错误处理程序 expressjs 中间件未捕获错误
- python - 如何删除缺少 xpath 文本的 AttributeError?
- postgresql - 在 json 数据上创建报告/仪表板