首页 > 解决方案 > 每次我进入活动时,如何使活动不重新加载/刷新?

问题描述

我有一个活动,我不希望每次进入它时都重新加载。我希望它显示我最后一次进入它的信息。但我也想在另一个活动中有一个按钮来刷新另一个活动,这样当我进入它时,信息就会改变。我说内容会发生变化,因为每次您进入活动时,活动都会显示不同的回收站视图。

那是我的 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?

            }
        });

    }
}

请帮助我不知道该怎么办。

谢谢

标签: javaandroid

解决方案


您有两个相当直接的选项,SharedPreferencesSavedInstanceState

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


推荐阅读