【发布时间】:2021-04-02 12:18:45
【问题描述】:
我已经尝试了几天来找到一种方法来做到这一点。
我正在构建一个食品订购应用程序,我有 3 个活动,一个用于订购,一个用于显示订单确认,一个用于显示所有订单。一切正常,除了我无法显示订单,只有最后一个。
我尝试过sharedPreferences,以各种方式意图捆绑,但无法弄清楚。
我认为问题是每次我回到活动时,包含订单的ArrayList变量都会重新初始化,并且只显示最新的订单。
我希望能够显示应用启动时所有已下的订单。
有什么建议吗?
这是我的 Orders 活动的代码,因此您可以查看我的尝试:
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();
}
}
【问题讨论】:
-
我看不到您在哪里写入共享首选项。
-
您好,共享的Preference在MainActivity中,这是显示所有订单的Activity。
标签: java android kotlin arraylist