Як ви передаєте значення String за допомогою кнопки від однієї активності до двох різних дій?

Я хотів би передати значення, яке я отримую від EditText до двох дій одним натисканням кнопки. Мені вдалося передати значення в одну діяльність, відобразивши її в textview, і я хотів би зробити те ж саме з іншою діяльністю, але я не впевнений, що випадок перемикання є правильним методом, оскільки є тільки одна кнопка.

Це коди для першої діяльності:

public class ProfInfo1 extends Activity {

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.profinfo1);


    final EditText et0 = (EditText) findViewById (R.id.et_name);
    final EditText et1 = (EditText) findViewById (R.id.et_age);
    final EditText et2 = (EditText) findViewById (R.id.et_height);
    final EditText et3 = (EditText) findViewById (R.id.et_weight);

    Button back = (Button) findViewById(R.id.btn_back1);
    back.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
        Intent a = new Intent(ProfInfo1.this, WelcomeActivity.class);
        startActivity(a);
    }

    });

    Button next = (Button) findViewById(R.id.btn_next1);
    next.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent intent=new Intent(ProfInfo1.this, ViewProf1.class);
        intent.putExtra("name", et0.getText().toString());
        intent.putExtra("age", et1.getText().toString());
        intent.putExtra("height", et2.getText().toString());
        intent.putExtra("weight", et3.getText().toString());
        startActivity(intent);
    }
});


}   
}

Це друга дія, де відображаються значення:

public class ViewProf1 extends Activity {
EditText age, height, weight;
String a, h, w;
Float age1, height1, weight1;
float bmi, cal;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.profinfo1view);

    TextView nameView = (TextView) findViewById (R.id.view_name);
    nameView.setText("Hello " + getIntent().getExtras().getString("name") + ",");
    TextView ageView = (TextView) findViewById (R.id.view_age);
    ageView.setText("Age: " + getIntent().getExtras().getString("age"));
    TextView heightView = (TextView) findViewById (R.id.view_height);
    heightView.setText("Your current height is " + getIntent().getExtras().getString("height") + " m.");
    TextView weightView = (TextView) findViewById (R.id.view_weight);
    weightView.setText("Your current weight is " + getIntent().getExtras().getString("weight") + " kg.");

    a = getIntent().getExtras().getString("age");
    h = getIntent().getExtras().getString("height");
    w = getIntent().getExtras().getString("weight");

    age1 = Float.valueOf(a).floatValue();
    height1 = Float.valueOf(h).floatValue();
    weight1 = Float.valueOf(w).floatValue();

    //bmi calculation
    bmi = (float) (weight1/Math.pow(height1, 2));
    TextView showresult = (TextView) findViewById (R.id.view_bmi);
    showresult.setText("Your BMI is " + Float.valueOf(bmi) + ".");

    //cal intake calculation
    cal = (float) (((655 + (9.6 * weight1) + (1.8 * height1) - (4.7 * age1)) * 1.2) - 550);
    TextView showcal = (TextView) findViewById (R.id.view_cal);
    showcal.setText("Your ideal daily calories intake is " + Float.valueOf(cal) + ".");

    //next button
    Button next2 = (Button) findViewById (R.id.btn_next2);
    next2.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
        Intent a = new Intent(ViewProf1.this, FoodDiary.class);
        startActivity(a);
    }

    });

    //back button
    Button back2 = (Button) findViewById (R.id.btn_back2);
    back2.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
        Intent a = new Intent(ViewProf1.this, ProfInfo1.class);
        startActivity(a);
    }

    });


}

третя діяльність:

public class CompareWeight extends Activity {

EditText weight;
String w;
Float weight1;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.compareweight);

    TextView weightView = (TextView) findViewById (R.id.test);
    weightView.setText("Your previous weight is " + getIntent().getExtras().getString("weight") + " kg.");

    w = getIntent().getExtras().getString("weight");

    weight1 = Float.valueOf(w).floatValue();
}
}

Я тільки хочу передати значення ваги третій діяльності.

0
Можна показувати тільки одну активність, для чого Ви хочете відправити значення у дві дії? Ви можете надіслати значення з наміром, починаючи діяльність, так само, як Ви можете отримати значення, якщо Ви розпочали другу активність
додано Автор Opiatefuchs, джерело
розмістити свій код. Це допоможе нам детально розібратися.
додано Автор vinothp, джерело
@elvegadro я розмістив відповідь, вона повинна вирішити вашу проблему. Подивіться на це
додано Автор vinothp, джерело
@Opiatefuchs в першій діяльності, я посилаю 4 значення, але в другому я тільки хочу відправити один на другий. Я зняв коди, щоб містити тільки те значення, яке я хочу, і він все ще не показує результат.
додано Автор elvegadro, джерело
@Vino Додав коди. Я не міг передати цінність третій діяльності.
додано Автор elvegadro, джерело

7 Відповіді

Ви можете передавати значення тільки до однієї активності в момент часу, але якщо ви хочете передати значення ваги до третьої активності, тоді ви можете встановити її значення у першій активності та отримати третю активність. Отже, в основному я маю на увазі

  1. Помістіть значення, які ви хочете передати у SecondActivity за допомогою putExtra.
  2. Встановіть змінну sharedPrefernce.
  3. startActivity (намір);
1
додано

Використовуйте SharedPreferences у onPause для поточної Діяльність , як показано нижче, і надішліть дані до інших дій, як показано нижче

@Override
protected void onPause() 
{
  super.onPause(); 
  SharedPreferences preferences = getSharedPreferences("sharedPrefs", 0);
  SharedPreferences.Editor editor = preferences.edit();  
  editor.putString("SearchText",edt.getText().toString());
  editor.commit();

}

і в інших двох Захопленнях отримуйте дані зі спільних налаштувань, як показано нижче:

 SharedPreferences preferences = getSharedPreferences("sharedPrefs", 0);
 String edtText = preferences.getString("SearchText","");
0
додано
якщо ви можете поглянути на мій код, що було б здорово.
додано Автор elvegadro, джерело

Використовуючи PutExtra перед запускомActivity.

0
додано

Можна також отримати рядок у другій подібній діяльності:

Bundle extras = getIntent().getExtras();
        if(extras != null) {
            item = extras.getString("myitempassed");
        }
0
додано

Ви можете зберегти значення у спільних настройках і оновити значення o Кнопка "Кнопка". Таким чином, значення будуть доступні для інших дій.

0
додано

Це відбувається тому, що у вашій Second Activity ви просто викликаєте Intent без передачі будь-яких значень,

Під час другої дії

Замінити намір

    Intent a = new Intent(ViewProf1.this, FoodDiary.class);
    startActivity(a); 

З цим

    Intent a = new Intent(ViewProf1.this, FoodDiary.class);
    a.putExtra("weight", weight1);
    startActivity(a);
0
додано
зробіть те саме, отримайте вагу в FoodDairy і передайте вагу дії CompareWeight
додано Автор vinothp, джерело
якщо так, ви передаєте нульове значення з FoodDairy . Перевірте там
додано Автор vinothp, джерело
Ні Якщо ви передаєте дані з ViewProf1 , воно має бути на FoodDiary . Перед відправкою перевірте, які дані ви надсилаєте з ProfInfo1. Якщо є якісь дані, то проблема знаходиться в CompareWeight.
додано Автор vinothp, джерело
є ще один макет між активністю двох і трьох, які не потребують значення, як я можу передати значення через діяльність, тому що, як ви можете бачити в моїх кодах, діяльність йде від ViewProf1 >> FoodDiary >> CompareWeight.
додано Автор elvegadro, джерело
logcat показує NullPointerException для CompareWeight.java.
додано Автор elvegadro, джерело
Я вирішив пропустити FoodDiary для перевірки значення передачі між ProfInfo1 >> CompareWeight, і це все ще дає мені NullPointerException. Це тому, що мої дані не зберігаються в базі даних?
додано Автор elvegadro, джерело

Я не бачу, де в коді ви викликаєте третю активність (CompareWeight).

Коли ви починаєте активацію CompareWeight, ви можете просто передати значення ваги, використовуючи додаткові ставки, як ви зробили для другої активності.

Якщо у вашій точці немає значення ваги, то потрібно зберегти його - @Avadhani Y має гарну пропозицію щодо використання SharedPreferences. Або ви можете використовувати БД SQLite для зберігання ваших значень.

0
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників

android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.