我会喜欢一些帮助(对于Android来说是个新手)。
我目前有4个活动。前三个活动中包含EditText字段,然后最终活动显示到目前为止输入的所有信息。看起来很简单,对吧?
所以在查看这个网站后,我发现这样做的方法是使用putExtra()和getExtra();
这似乎不太有效,因为我添加到extras hashset的所有内容在最终活动中都不可用。有什么建议吗?
由于
以下代码寻求帮助
package com.example.smallchangebigloss;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class EnterName extends Activity {
private EditText edit;
private Bundle extras = getIntent().getExtras();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_enter_name);
edit = (EditText) findViewById(R.id.nameEdit);
}
public Bundle getExtras(){
return extras;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.enter_name, menu);
return true;
}
public void next(View view) {
if (edit.getText().toString().equals("")) {
new AlertDialog.Builder(this).setTitle("Ut Oh!")
.setMessage("Please enter your name.")
.setNeutralButton("Try again", null).show();
}
else {
Intent i = new Intent(getApplicationContext(), CurrentWeight.class);
i.putExtra("name", edit.getText().toString());
startActivity(i);
}
}
}
package com.example.smallchangebigloss;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
公共类CurrentWeight扩展了Activity {
private EditText edit;
private String name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_current_weight);
Bundle extras = getIntent().getExtras();
name = extras.getString("name");
edit = (EditText) findViewById(R.id.currentWeightEdit);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.current_weight, menu);
return true;
}
public void next(View view) {
if (edit.getText().toString().equals("")) {
new AlertDialog.Builder(this).setTitle("Ut Oh!")
.setMessage("Please enter your current weight.")
.setNeutralButton("Try again", null).show();
}
else {
Intent i = new Intent(getApplicationContext(),GoalWeight.class);
i.putExtra("name", name);
i.putExtra("current", edit.getText().toString());
startActivity(i);
}
}
}
package com.example.smallchangebigloss;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
公共类GoalWeight扩展了Activity {
private EditText edit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_goal_weight);
Bundle extras = getIntent().getExtras();
System.out.println(extras.containsKey("name"));
extras.containsKey("current");
edit = (EditText) findViewById(R.id.currentWeightEdit);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.goal_weight, menu);
return true;
}
public void next(View view) {
if (edit.getText().toString().equals("")) {
new AlertDialog.Builder(this).setTitle("Ut Oh!")
.setMessage("Please enter your Goal Weight.")
.setNeutralButton("Try again", null).show();
}
else {
Intent i = new Intent(getApplicationContext(), Complete.class);
i.putExtra("goal", edit.getText().toString());
startActivity(i);
}
}
}
package com.example.smallchangebigloss;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;
public class Complete extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle extras = getIntent().getExtras();
// TextView current = (TextView) findViewById(R.id.completeCurrentMod);
// current.setText("hi");
//// current.setText(extras.getString("current")); These lines break it
setContentView(R.layout.activity_complete);
System.out.println("name: " + extras.getString("name") + "Current weight: "
+ extras.getString("current") + "goal: " + extras.getString("goal"));//Only displaying last ones...bundle them everytime in each class?
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.complete, menu);
return true;
}
}
答案 0 :(得分:2)
您似乎没有将所有extras
附加到每个新Intent
。由于您需要在每个Intent
中创建新的Activity
,因此您还需要附加上一个extras
中的所有Activities
。最简单的方法是创建Bundle然后在每个活动中获取此Bundle
,并每次将新extras
添加到Bundle
。
您可以采用另一种方式,因此您无需跟踪每个extras
或Bundle
即可使用SharedPreferences。只需将值添加到新的首选项,然后在最终的Activity
中获取所有值。该链接有一个创建和获取SharedPreferences
答案 1 :(得分:1)
以下是您的代码正在做的事情:
活动1:
Start with no extras
Create and save extra called "name"
活动2:
Read name out of extras
create and save extra called "current"
save the value of name
活动3:
Read the whole bundle of extras
Create and save extra called "goal"
//Do nothing with the whole bundle
活动4:
Read the whole bundle of extras
在活动3的内部,您将从额外内容中提取值,但不会“重新保存”它们,以便它们被传递到最终活动。因此,当你进入activity4时,你应该拥有的唯一额外内容是"goal"
,因为这是你在Activity3末尾添加的唯一内容。
答案 2 :(得分:1)
您面临的问题是您需要将每个类中的值从一个类传递到另一个类。因此,在GoalWeight
活动中,您还需要传递“名称”和“当前”值。
开始下一个活动时,请执行以下操作。
Intent i = new Intent(getApplicationContext(), Complete.class);
i.putExtra("goal", edit.getText().toString());
i.putExtra("name", extras.getString("name"));
i.putExtra("current", extras.getString("current"));
startActivity(i);
答案 3 :(得分:1)
您正在每个文本输入活动中创建一个新的Intent并开始完成活动。 第一次创建Complete Activity实例时,您将获得额外的Intent,具体取决于触发的Activity,来自该Activity的意图。
如果您的完整活动被销毁并重新创建,那么它只会从创建它的人那里获得意图。
现在,如果您的完整活动已经创建并正在运行,并且您正在从其他活动中解雇意图,那么您应该看一下
http://developer.android.com/reference/android/app/Activity.html#onNewIntent(android.content.Intent)
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
// get your new intent data here
}
顺便说一句,在一个真实世界的应用程序中,你不会成为遍布各个活动的输入字段,所以我假设你只是尝试一下,这很酷。
答案 4 :(得分:0)
在第一个Activity中,将字符串转换为EditText
中的变量。
Intent in = new Intent(getApplicationContext(), B.class);
in.putExtra("TAG", String);
startActivity(in);
在第二项活动中,通过
获取Intent x = getIntent();
String variable = x.getStringExtra("TAG");
等等..