Aber ich stelle ja in meiner mainActivity eine hat Beziehung her und dann ist der Stack ja nur für diese spezielle Main Klasse verfügbar
Das Thema geht mir langsam echt auf die nerven
Ich füg mal die drei Quelltexte von meiner Rechner.java, OperatorActivity.java und MainActivity.java hier ein. Vieleicht hab ich einfach grundsetzlich nen Fehler drin.
Rechner.java
package com.example.stackrechner;
//Importieren der Stack-Klasse
import java.util.Stack;
public class Rechner{
// Zunächst definieren wir den operationsStack vor, ohne ihn einen Wert zu zuweisen.
public Stack <Double> valueStack;
public boolean Check;
public String strHistory;
//Konstruktor für Rechner-Klasse
Rechner( )
{
//operationsStack wird das neue Objekt vom Stack-Konstruktor zugewiesen
//man beachte, dass hier erneut der Typ des
valueStack = new Stack<Double>();
}
public void add (String pZahlStr){
Double zahl = Double.valueOf(pZahlStr);
valueStack.push(zahl);
}
public String getTop (){
String str = valueStack.peek().toString();
return str;
}
public boolean StackCheck (){
Check = valueStack.isEmpty();
return Check;
}
public boolean DoubleStackCheck(){
if (this.StackCheck() == false){
Double stValue1 = valueStack.peek();
valueStack.pop();
Check = this.StackCheck();
valueStack.push(stValue1);
return Check;
}
return true;
}
public String addieren (){
Double wert1 = (Double) valueStack.peek();
strHistory = wert1.toString() + " + ";
valueStack.pop();
Double wert2 = (Double) valueStack.peek();
strHistory = strHistory + wert2.toString() + " = ";
valueStack.pop();
Double ergebnis = wert2 + wert1;
strHistory = strHistory + ergebnis.toString();
valueStack.push(ergebnis);
return strHistory;
}
public String subtrahieren (){
Double wert1 = (Double) valueStack.peek();
strHistory = wert1.toString() + " - ";
valueStack.pop();
Double wert2 = (Double) valueStack.peek();
strHistory = strHistory + wert2.toString() + " = ";
valueStack.pop();
Double ergebnis = wert2 - wert1;
strHistory = strHistory + ergebnis.toString();
valueStack.push(ergebnis);
return strHistory;
}
public String multiplizieren (){
Double wert1 = (Double) valueStack.peek();
strHistory = wert1.toString() + " * ";
valueStack.pop();
Double wert2 = (Double) valueStack.peek();
strHistory = strHistory + wert2.toString() + " = ";
valueStack.pop();
Double ergebnis = wert2 * wert1;
strHistory = strHistory + ergebnis.toString();
valueStack.push(ergebnis);
return strHistory;
}
public String dividieren (){
Double wert1 = (Double) valueStack.peek();
strHistory = wert1.toString() + " / ";
valueStack.pop();
Double wert2 = (Double) valueStack.peek();
strHistory = strHistory + wert2.toString() + " = ";
valueStack.pop();
Double ergebnis = wert2 / wert1;
strHistory = strHistory + ergebnis.toString();
valueStack.push(ergebnis);
return strHistory;
}
public String Wurzel (){
Double wert1 = (Double) valueStack.peek();
strHistory = wert1.toString() + " = ";
valueStack.pop();
Double ergebnis = Math.sqrt(wert1);
strHistory = strHistory + ergebnis.toString();
valueStack.push(ergebnis);
return strHistory;
}
}
OperatorActivity.java
package com.example.stackrechner;
import java.util.ArrayList;
import java.util.List;
import android.support.v7.app.ActionBarActivity;
import android.content.Intent;
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;
public class OperatorActivity extends ActionBarActivity {
List<String> liHistory = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_operator);
importButton();
Intent getListView = getIntent();
liHistory = getListView.getStringArrayListExtra("Verlauf");
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.operator, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
if (item.toString().equals("Verlauf")){
Intent History = new Intent(this, HistoryActivity.class);
History.putStringArrayListExtra("Verlauf", (ArrayList<String> liHistory);
startActivity(History);
}
else if (item.toString().equals("Impressum")){
Intent Impressum = new Intent(this, ImpressumActivity.class);
Impressum.putStringArrayListExtra("Verlauf", (ArrayList<String> liHistory);
startActivity(Impressum);
}
else if (item.toString().equals("Operatoren")){
}
else if (item.toString().equals("Rechner")){
setContentView(R.layout.activity_main);
}
return true;
}
public void importButton (){
Button btWurzel=(Button)findViewById(R.id.btWurzel);
btWurzel.setOnClickListener(ClickListener);
}
public OnClickListener ClickListener = new OnClickListener() {
public void onClick(View v)
{
if (v.getId() == R.id.btWurzel){
Intent i = new Intent(OperatorActivity.this, MainActivity.class);
i.putExtra("methodName","Wurzel");//goes to previous INtent
i.putStringArrayListExtra("Verlauf", (ArrayList<String> liHistory);
startActivity(i);//will trigger only myMethod in MainActivity
}
}
};
}
MainActivity.java
package com.example.stackrechner;
import java.util.ArrayList;
import java.util.List;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
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.EditText;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
// Das Rechner-Objekt
private Rechner hrechner;
public List<String> liHistory;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Es wird ein neues Rechner-Objekt erstellt der Klasse Rechner.java erstellt
hrechner = new Rechner();
liHistory = new ArrayList<String>();
importButton();
onNewIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (intent.getStringExtra("methodName") != null) {
if (intent.getStringExtra("methodName").equals("Wurzel")) {
myMethod();
if (hrechner.StackCheck() == false){ //hier liegt das Problem! Der Stack ist leider leer wenn die MainActivity neu geöffnet wird.
myMethod();
String valueHistory = hrechner.Wurzel();
liHistory.add(valueHistory);;
EditText tfEingabe = (EditText) findViewById(R.id.tfEingabe);
tfEingabe.setText(hrechner.getTop());
}
}
}
}
public void myMethod() {
Log.e("Test", "myMethode");
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
if (item.toString().equals("Schließen")){
onCreateDialog(10);
}
else if (item.toString().equals("Verlauf")){
Intent History = new Intent(this, HistoryActivity.class);
History.putStringArrayListExtra("Verlauf", (ArrayList<String> liHistory);
startActivity(History);
}
else if (item.toString().equals("Impressum")){
Intent Impressum = new Intent(this, ImpressumActivity.class);
Impressum.putStringArrayListExtra("Verlauf", (ArrayList<String> liHistory);
startActivity(Impressum);
}
else if (item.toString().equals("Operatoren")){
Intent Operator = new Intent(this, OperatorActivity.class);
Operator.putStringArrayListExtra("Verlauf", (ArrayList<String> liHistory);
startActivity(Operator);
}
else if (item.toString().equals("Rechner")){
setContentView(R.layout.activity_main);
}
return true;
}
@Override
protected Dialog onCreateDialog(int id){
switch (id) {
case 10: Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Applikation wird geschlossen!");
builder.setCancelable(true);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
MainActivity.this.finish();
}
});
builder.setNegativeButton("Nein, doch nicht!", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "Applikation wird fortgesetzt", Toast.LENGTH_LONG).show();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
return null;
}
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
public String getstrText (){
EditText tfEingabe = (EditText) findViewById(R.id.tfEingabe);
String stringEingabe = tfEingabe.getText().toString();
tfEingabe.setText("");
return stringEingabe;
}
public void addValue(String pValue, int Number){
EditText tfEingabe = (EditText) findViewById(R.id.tfEingabe);
tfEingabe.setText(pValue+Number);
}
public void importButton (){
Button btEnter=(Button)findViewById(R.id.btEnter);
btEnter.setOnClickListener(ClickListener);
Button bt0=(Button)findViewById(R.id.bt0);
bt0.setOnClickListener(ClickListener);
Button bt1=(Button)findViewById(R.id.bt1);
bt1.setOnClickListener(ClickListener);
Button bt2=(Button)findViewById(R.id.bt2);
bt2.setOnClickListener(ClickListener);
Button bt3=(Button)findViewById(R.id.bt3);
bt3.setOnClickListener(ClickListener);
Button bt4=(Button)findViewById(R.id.bt4);
bt4.setOnClickListener(ClickListener);
Button bt5=(Button)findViewById(R.id.bt5);
bt5.setOnClickListener(ClickListener);
Button bt6=(Button)findViewById(R.id.bt6);
bt6.setOnClickListener(ClickListener);
Button bt7=(Button)findViewById(R.id.bt7);
bt7.setOnClickListener(ClickListener);
Button bt8=(Button)findViewById(R.id.bt8);
bt8.setOnClickListener(ClickListener);
Button bt9=(Button)findViewById(R.id.bt9);
bt9.setOnClickListener(ClickListener);
Button btPlus=(Button)findViewById(R.id.btPlus);
btPlus.setOnClickListener(ClickListener);
Button btMinus=(Button)findViewById(R.id.btMinus);
btMinus.setOnClickListener(ClickListener);
Button btMal=(Button)findViewById(R.id.btMal);
btMal.setOnClickListener(ClickListener);
Button btGeteilt=(Button)findViewById(R.id.btGeteilt);
btGeteilt.setOnClickListener(ClickListener);
Button btBack=(Button)findViewById(R.id.btBack);
btBack.setOnClickListener(ClickListener);
Button btAllBack=(Button)findViewById(R.id.btAllBack);
btAllBack.setOnClickListener(ClickListener);
Button btPunkt=(Button)findViewById(R.id.btPunkt);
btPunkt.setOnClickListener(ClickListener);
Button btNegativ=(Button)findViewById(R.id.btNegativ);
btNegativ.setOnClickListener(ClickListener);
}
public OnClickListener ClickListener = new OnClickListener() {
public void onClick(View v)
{
if (v.getId() == R.id.btEnter){
String strValue = getstrText();
if (strValue.length() != 0 || strValue != "."){
hrechner.add(strValue);
}
}
else if (v.getId() == R.id.bt0){
String strValue = getstrText();
addValue(strValue, 0);
}
else if (v.getId() == R.id.bt1){
String strValue = getstrText();
addValue(strValue, 1);
}
else if (v.getId() == R.id.bt2){
String strValue = getstrText();
addValue(strValue, 2);
}
else if (v.getId() == R.id.bt3){
String strValue = getstrText();
addValue(strValue, 3);
}
else if (v.getId() == R.id.bt4){
String strValue = getstrText();
addValue(strValue, 4);
}
else if (v.getId() == R.id.bt5){
String strValue = getstrText();
addValue(strValue, 5);
}
else if (v.getId() == R.id.bt6){
String strValue = getstrText();
addValue(strValue, 6);
}
else if (v.getId() == R.id.bt7){
String strValue = getstrText();
addValue(strValue, 7);
}
else if (v.getId() == R.id.bt8){
String strValue = getstrText();
addValue(strValue, 8);
}
else if (v.getId() == R.id.bt9){
String strValue = getstrText();
addValue(strValue, 9);
}
else if (v.getId() == R.id.btPlus){
if (hrechner.DoubleStackCheck() == false){
String valueHistory = hrechner.addieren();
liHistory.add(valueHistory);
EditText tfEingabe = (EditText) findViewById(R.id.tfEingabe);
tfEingabe.setText(hrechner.getTop());
}
}
else if (v.getId() == R.id.btMinus){
if (hrechner.DoubleStackCheck() == false){
String valueHistory = hrechner.subtrahieren();
liHistory.add(valueHistory);
EditText tfEingabe = (EditText) findViewById(R.id.tfEingabe);
tfEingabe.setText(hrechner.getTop());
}
}
else if (v.getId() == R.id.btMal){
if (hrechner.DoubleStackCheck() == false){
String valueHistory = hrechner.multiplizieren();
liHistory.add(valueHistory);
EditText tfEingabe = (EditText) findViewById(R.id.tfEingabe);
tfEingabe.setText(hrechner.getTop());
}
}
else if (v.getId() == R.id.btGeteilt){
if (hrechner.DoubleStackCheck() == false){
String valueHistory = hrechner.dividieren();
liHistory.add(valueHistory);;
EditText tfEingabe = (EditText) findViewById(R.id.tfEingabe);
tfEingabe.setText(hrechner.getTop());
}
}
else if (v.getId() == R.id.btWurzel){
if (hrechner.StackCheck() == false){
String valueHistory = hrechner.Wurzel();
liHistory.add(valueHistory);;
EditText tfEingabe = (EditText) findViewById(R.id.tfEingabe);
tfEingabe.setText(hrechner.getTop());
}
}
else if (v.getId() == R.id.btBack){
String strValue = getstrText();
if (strValue.length() >= 1){
strValue = strValue.substring( 0, strValue.length()-1 );
EditText tfEingabe = (EditText) findViewById(R.id.tfEingabe);
tfEingabe.setText(strValue);
}
}
else if (v.getId() == R.id.btAllBack){
String strValue = getstrText();
int inStrValue = strValue.length();
strValue = strValue.substring(0, strValue.length()-inStrValue);
EditText tfEingabe = (EditText) findViewById(R.id.tfEingabe);
tfEingabe.setText(strValue);
}
else if (v.getId() == R.id.btPunkt){
String strValue = getstrText();
EditText tfEingabe = (EditText) findViewById(R.id.tfEingabe);
tfEingabe.setText(strValue+".");
}
else if (v.getId() == R.id.btNegativ){
String strValue = getstrText();
if (strValue.length() >= 1){
Double zahl = Double.valueOf(strValue);
Double negativ = -1.0;
if (zahl > 0){
strValue = "-" + strValue;
}
else if (zahl < 0){
zahl = zahl * negativ;
strValue = zahl.toString();
}
else if ( zahl == 0){
}
EditText tfEingabe = (EditText) findViewById(R.id.tfEingabe);
tfEingabe.setText(strValue);
}
}
}
};
}
— geändert am 24.12.2014, 17:23:09
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.