0

我希望得到一些帮助(对 android 来说很新)。

我目前有4个activity。前三个activity中有EditText字段,然后最后一个activity显示了到目前为止输入的所有信息。看起来很简单,对吧?

所以在查看这个网站后,我发现这样做的方法是使用 putExtra() 和 getExtra();

这似乎不太有效,因为我添加到额外哈希集中的所有东西在最终活动中都不可用。有什么建议吗?

谢谢

下面的代码寻求帮助

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;
    }

}
4

5 回答 5

2

看起来您并没有将所有的附加extras到每个新的Intent. Intent由于您在 each 中创建了一个新的Activity,正如您需要做的那样,您还需要附加上一个中的extras所有Activities. 最简单的方法是创建一个Bundle,然后Bundle在每个活动中获取它并每次都添加新extrasBundle

您可以这样做的另一种方法是使用SharedPreferences,这样您就不必跟踪extras或 a 。每次只需将值添加到新的首选项中,然后将它们全部添加到 final 中。该链接有一个很好的例子来创建和获取BundleActivitySharedPreferences

于 2013-07-26T17:43:12.310 回答
1

您面临的问题是您需要在每个班级中将您的价值观从一个班级传递给另一个班级。因此,在GoalWeightActivity 中,您还需要传递“名称”和“当前”值。

所以在开始下一个Activity的时候做下面的事情。

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);
于 2013-07-26T17:47:02.833 回答
1

这大致是您的代码在做什么:

活动一:

Start with no extras
Create and save extra called "name"

活动二:

Read name out of extras
create and save extra called "current"
save the value of name

活动三:

Read the whole bundle of extras
Create and save extra called "goal"
//Do nothing with the whole bundle 

活动四:

Read the whole bundle of extras

在活动 3 中,您将值从附加项中提取出来,而不是“重新保存”它们,以便将它们传递给最终活动。因此,当您进入活动 4 时,您应该拥有的唯一额外内容是"goal"因为这是您在活动 3 末尾添加的唯一一个。

于 2013-07-26T17:41:41.980 回答
1

您正在每个文本输入活动中创建一个新意图并开始您的完整活动。第一次创建 Complete Activity 实例时,您将获得额外的 Intent,并且取决于哪个 Activity 被触发,来自该 Activity 的意图。

如果您的 Complete Activity 被销毁并重新创建,它将仅具有创建它的意图。

现在,如果您的 Complete 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
    }

顺便说一句,在现实世界的应用程序中,您的输入字段不会散布在活动中,所以我假设您只是在尝试,这很酷。

于 2013-07-26T17:49:59.187 回答
0

在第一个 Activity 中,将字符串从EditText.And

Intent in = new Intent(getApplicationContext(), B.class);
in.putExtra("TAG", String);
startActivity(in);

在第二个活动中,通过

Intent x = getIntent();
String variable = x.getStringExtra("TAG");

等等..

于 2013-07-26T17:49:16.597 回答