在活动中保存arraylist

nwo49xxi  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(437)

我已经试了好几天来想办法做到这一点。
我正在构建一个食品订购应用程序,我有3个活动,一个用于订购,一个用于显示订单确认,一个用于显示所有订单。一切正常,除了我不能显示命令,只有最后一个。
我试过了 sharedPreferences ,意图捆绑在各种各样的方式,但无法找出它。
我想问题是每次我回到活动中 ArrayList 包含订单的变量将重新初始化,并且只显示最新的订单。
我想能够显示所有的订单,已下,而应用程序上。
有什么建议吗?
以下是“我的订单”活动的代码,您可以看到我尝试了什么:

public class AllaBestallningar extends AppCompatActivity {

ArrayList<String> minaOrders = new ArrayList<>();

private static final String TEXT_CONTENTS = "AllaOrders";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alla_bestallningar);

        SharedPreferences sp = getApplicationContext().getSharedPreferences("orders", Context.MODE_PRIVATE);
        String order = sp.getString("order", "ingen text");
        minaOrders.add(order);
        minaOrders.add("Estelle");
        minaOrders.add("Nicklas");

        ListAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, minaOrders);

        ListView ordersList = (ListView) findViewById(R.id.minList);

        ordersList.setAdapter(adapter);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.app_meny, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.laggBesMeny:
                Intent i = new Intent(AllaBestallningar.this, MainActivity.class);
                startActivity(i);
                return true;
            case R.id.minaBesMeny:
                Toast.makeText(this, "Du är redan på beställningsidan", Toast.LENGTH_SHORT).show();
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        outState.putStringArrayList(TEXT_CONTENTS, minaOrders);
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        minaOrders = savedInstanceState.getStringArrayList(TEXT_CONTENTS);
    }
}

这是主要活动:

package learnprogramming.academy.cafestudent;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

import java.nio.channels.InterruptedByTimeoutException;
import java.util.ArrayList;
import java.util.zip.Inflater;

public class MainActivity extends AppCompatActivity {

    Button buttonPizza, buttonSallad, buttonKyckling, buttonRak;
    String bestallning = "", option= " ";
    Double pris = 0.0;
    RadioGroup radioGroup;
    RadioButton radioButton;
    SharedPreferences sp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        buttonPizza = (Button) findViewById(R.id.buttonPizza);
        buttonSallad = (Button) findViewById(R.id.buttonSallad);
        buttonKyckling = (Button) findViewById(R.id.buttonKycklingmacka);
        buttonRak = (Button) findViewById(R.id.buttonRakmacka);

        OnClickListener onOrder = new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v == buttonPizza) {
                    bestallning = bestallning + "Pizza 25kr \n";
                    pris += 25.00;
                    Toast.makeText(MainActivity.this, "Tillagd i beställningen", Toast.LENGTH_SHORT).show();
                } else if (v == buttonSallad) {
                    bestallning = bestallning + "Sallad 45kr \n";
                    pris += 45.00;
                    Toast.makeText(MainActivity.this, "Tillagd i beställningen", Toast.LENGTH_SHORT).show();
                } else if (v == buttonKyckling) {
                    bestallning = bestallning + "Kycklingmacka 40kr \n";
                    pris += 40.00;
                    Toast.makeText(MainActivity.this, "Tillagd i beställningen", Toast.LENGTH_SHORT).show();
                } else if (v == buttonRak) {
                    bestallning = bestallning + "Räkmacka 40kr \n";
                    pris += 40.00;
                    Toast.makeText(MainActivity.this, "Tillagd i beställningen", Toast.LENGTH_SHORT).show();
                }
                option = "\n " + bestallning + pris.toString()+ "kr \n ---------";
            }
        };

        option = "\n " + bestallning + pris.toString()+ "kr \n ---------";

        sp = getSharedPreferences("orders", Context.MODE_PRIVATE);

        buttonPizza.setOnClickListener(onOrder);
        buttonSallad.setOnClickListener(onOrder);
        buttonKyckling.setOnClickListener(onOrder);
        buttonRak.setOnClickListener(onOrder);

        Button bestalla;
        bestalla = (Button) findViewById(R.id.buttonBestall);

        View.OnClickListener onPlaceOrder = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(bestallning == ""){
                    Toast.makeText(MainActivity.this, "Du har inte gjort några val", Toast.LENGTH_SHORT).show();
                } else {
                    {
                        SharedPreferences.Editor editor = sp.edit();
                        editor.putString("order", option);
                        editor.commit();

                        Intent place = new Intent(MainActivity.this, Bestallningar.class);
                        Bundle bestall = new Bundle();
                        bestall.putString("beställning", bestallning);
                        bestall.putDouble("pris", pris);
                        place.putExtras(bestall);
                        startActivity(place);

                        bestallning = "";
                        pris = 0.0;
                    }
                }

            }
        };

        bestalla.setOnClickListener(onPlaceOrder);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.app_meny, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.laggBesMeny:
                Toast.makeText(this, "Du är redan på beställningsidan", Toast.LENGTH_SHORT).show();
                return true;
            case R.id.minaBesMeny:
                Intent i = new Intent(MainActivity.this, AllaBestallningar.class);
                startActivity(i);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public void checkButton(View v) {
        int radioId = radioGroup.getCheckedRadioButtonId();
        radioButton = findViewById(radioId);
        Toast.makeText(this, "Du har valt leverans kl: " + radioButton.getText(), Toast.LENGTH_SHORT).show();
    }

}
8i9zcol2

8i9zcol21#

订单应该使用存储库模式存储。存储库是具有单个示例的对象,该示例可以从应用程序中的任何屏幕访问,并且其生命周期不受任何活动的限制。
这只是一个模式,没有要实现的库或类,您必须通过google“repository模式”来学习如何实现它。
存储库将具有检索和存储数据的方法。在内部,它可以使用数据库在会话之间持久化数据,或者在不需要持久化的情况下将数据存储在内存中的变量中。如果您需要获取数据并将其存储在数据库中,它还可以进行网络调用等。

相关问题