我已经试了好几天来想办法做到这一点。
我正在构建一个食品订购应用程序,我有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();
}
}
1条答案
按热度按时间8i9zcol21#
订单应该使用存储库模式存储。存储库是具有单个示例的对象,该示例可以从应用程序中的任何屏幕访问,并且其生命周期不受任何活动的限制。
这只是一个模式,没有要实现的库或类,您必须通过google“repository模式”来学习如何实现它。
存储库将具有检索和存储数据的方法。在内部,它可以使用数据库在会话之间持久化数据,或者在不需要持久化的情况下将数据存储在内存中的变量中。如果您需要获取数据并将其存储在数据库中,它还可以进行网络调用等。