2015-04-22 80 views
0

我是新来的Android
我已经学会了如何通过putextra传递activites之间的数据,在我的应用程序getextra
,当我从活性1传递数据和活性2main_activity并添加数据和把它传递给第三活性(输出
代替此外,只有要么活性1或活性2的值传递给输出正被传递(值被一个我在运行我的应用程序时最后输入的)
这里是我的应用程序的代码
Mainactivity如何活动之间传递数据和对数据进行算术运算

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

     Intent j = getIntent(); 
     a= j.getDoubleExtra("double1",0.0); 

     Intent k = getIntent(); 
     b = k.getDoubleExtra("double2",0.0); 
     result = a+b; 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    public void on_click_activity1button(View view) { 
     Intent intent1 = new Intent(this,activity1.class); 
       startActivity(intent1); 

    } 

    public void on_click_activity2button(View view) { 
     Intent intent2 = new Intent(this,activity2.class); 
     startActivity(intent2); 

    } 

    public void on_click_outputbutton(View view) { 
     Intent intent3 = new Intent(this,output.class); 
     intent3.putExtra("result", result); 

     startActivity(intent3); 

    } 
} 

活性1

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity1); 
    } 
    public void on_click_activity1done(View view) { 

     EditText text1 = (EditText) findViewById(R.id.activity1edittext); 
     a=Double.parseDouble(text1.getText().toString()); 

     Intent fromactivity1 = new Intent(this,MainActivity.class); 
     fromactivity1.putExtra("double1", a); 
     startActivity(fromactivity1); 
    } 
} 

Activity2.java

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

    public void on_click_activity2done(View view) { 

     EditText text2 = (EditText) findViewById(R.id.activity2edittext); 
     b=Double.parseDouble(text2.getText().toString()); 

     Intent fromactivity2 = new Intent(this,MainActivity.class); 
     fromactivity2.putExtra("double2", b); 
     startActivity(fromactivity2); 
    } 
} 

output.java

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.output); 
     Intent frommaindone = getIntent(); 
     Double total = frommaindone.getDoubleExtra("result",0.0); 
     TextView show = (TextView) findViewById(R.id.resulttextview); 
     show.setText("addition is" + total); 
    } 
} 

请帮助我,并告诉我,我做错了什么

+0

你这样做的方式是不正确的,你正在创建多个主要活动,没有人的数字将永远是错误的。看看startActivityForResult –

+0

我也试过startActivityForResult,但同样的问题正在发生 – Navdeep

+0

当我运行我的应用程序,并按下按钮1以获取textfrom(双)activity1之后,当我按下按钮2以获得textfrom(双)activity2,我认为来自activity1的变量值被销毁。我想知道如何保留它,以便我可以添加两个值a和b。 – Navdeep

回答

0

您必须使用startActivityForResult方法从两个输入活动中获取值,然后将结果传递给输出活动。按以下方式更改代码并尝试。

活性1

公共类活性1延伸ActionBarActivity {

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

public void on_click_activity1done(View view) { 

    EditText text1 = (EditText) findViewById(R.id.activity1edittext); 
    double b = Double.parseDouble(text1.getText().toString()); 

    Intent result = new Intent(); 
    result.putExtra("double1", b); 
    setResult(RESULT_OK, result); 
    finish(); 

} 

}

Activity2.java

public class Activity2 extends ActionBarActivity { 

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


    public void on_click_activity2done(View view) { 

     EditText text2 = (EditText) findViewById(R.id.activity2edittext); 
     double b = Double.parseDouble(text2.getText().toString()); 

     Intent result = new Intent(); 
     result.putExtra("double2", b); 
     setResult(RESULT_OK, result); 
     finish(); 

    } 
} 

MainActivity.java

public class MainActivity extends ActionBarActivity { 

    private final int ACTIVITY1 = 1; 
    private final int ACTIVITY2 = 2; 
    private double result, double1,double2; 

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

    } 

    public void onActivityOneClick(View view) { 
     Intent intent = new Intent(this, Activity1.class); 
     startActivityForResult(intent, ACTIVITY1); 
    } 

    public void onActivityTwoClick(View view) { 
     Intent intent = new Intent(this, Activity2.class); 
     startActivityForResult(intent, ACTIVITY2); 
    } 

    public void on_click_outputbutton(View view) { 
     result = double1 + double2; 
     Intent intent = new Intent(this, OutPut.class); 
     intent.putExtra("result", result); 
     startActivity(intent); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(resultCode==RESULT_OK){ 
      switch(requestCode){ 
      case ACTIVITY1:  
       double1 = data.getDoubleExtra("double1", 0); 
       break; 
      case ACTIVITY2: 
       double2 = data.getDoubleExtra("double2", 0); 
       break; 
      }     
     } 
    } 
} 

输出。java

public class OutPut extends ActionBarActivity { 

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

     double total = getIntent().getDoubleExtra("result", 0);  
     TextView show = (TextView) findViewById(R.id.resulttextview); 
     show.setText("addition is" + total); 
    } 

} 
+0

非常感谢你..我与最后两天的问题斗争我尝试使变量静态,使用startActivityforResult,使用捆绑等但没有任何工作,你用开关盒来解决问题,你可以解释我做错了什么,你是如何得到解决方案 – Navdeep

+0

当应用程序运行它创建一个实例MainActivity,但你通过调用创建两个新的MainActivity实例从两个输入活动开始活动。所以当你点击上次创建的mainactivity实例上的输出按钮时,它只会显示你在上一次输入活动中输入的值。 – TdSoft

0

这是不可能的,你的代码的工作,因为当你回来,并保存一个值,走出去另一个,你失去了旧的价值。

在我看来,你正在为这个问题做一个坏的方法,但是如果你真的想这样做,我唯一拥有的就是使用静态变量,尽管我不推荐这样做。因此,在MainActivity上创建两个静态变量,保存数据时,在那里执行此操作,并且当您想要输出时,请在两者之间发送操作。这种方式工作。