2013-07-26 3 views
0

Мне бы очень понравилась помощь (новая для android).Передача информации между несколькими действиями

В настоящее время у меня есть 4 действия. Первые три действия имеют в них поля EditText, а затем окончательное действие отображает всю информацию, которая была введена до сих пор. Кажется, достаточно просто, не так ли?

Итак, посмотрев на этом сайте, я обнаружил, что для этого нужно использовать putExtra() и getExtra();

Это не совсем похоже на работу, так как все вещи, которые я добавляю в hashset extras, недоступны в конечном действии. Любой совет?

Благодаря

код ниже для помощи

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 расширяет активность {

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 расширяет активность {

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

Каковы типы данных? –

ответ

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); 
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 вы тянете значения из массовки, но не «повторно экономии «их так, чтобы они передавались в конечном итоге. Поэтому, когда вы переходите на активность4, только дополнительный, который вам нужен, это "goal", потому что это единственный, который вы добавили в конце Activity3.

+0

Так мой способ мышления правильно и единственный способ сделать это? Добавить имя в дополнение -> перейти к следующему действию. вытащить имя из вида деятельности, добавить текущий и имя для дополнительных услуг -> следующая деятельность ... и т. Д.? – Programatt

+0

@Programatt yep, вы должны явно добавить каждое из предыдущих значений в новое намерение, которое вы используете, чтобы начать следующее действие. – FoamyGuy

2

Похоже, вы не прикрепляете все extras к каждому новому Intent. Поскольку вы создаете новый Intent в каждом Activity, как вам нужно делать, вам также необходимо прикрепить все extras от предыдущего Activities. Самый простой способ - создать Bundle, затем получить это Bundle в каждом действии и добавить новый extras в Bundle каждый раз.

Другой способ, которым вы могли бы это сделать, чтобы вам не нужно отслеживать extras или Bundle в каждом из них, необходимо использовать SharedPreferences.Просто добавьте значение в новое предпочтение каждый раз, а затем получите их все в финале Activity. Эта ссылка имеет хороший пример создания и получения SharedPreferences

0

В первой деятельности, получить строки в переменную из EditText

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

Во второй деятельности, получить его

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

И так далее ..

1

Вы создаете новое намерение в каждой вашей текстовой записи. Мероприятия. В первый раз, когда создан экземпляр 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 
    } 

Как и в сторону, в реальном мире приложение не будет будь то ваши поля ввода, разбросанные по всем видам деятельности, поэтому я предполагаю, что вы просто пытаетесь разобраться, что здорово.

Смежные вопросы