отримати діалогове вікно значення текстового перегляду батьківської діяльності

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

так я відкриваю діалогове вікно з основної діяльності

 Button calc = (Button) findViewById(R.id.btn_converter);
    calc.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Intent myIntent = new Intent(MainActivity.this, Calculator.class);
            MainActivity.this.startActivity(myIntent);
        }
    });

це як я намагаюся прочитати значення текстового перегляду в діалоговому вікні

Textview t1 = (TextView) findViewById(R.id.txt_cad_alis)

але "t1" завжди є нульовим. що я роблю неправильно?

0
перший фрагмент коду з основної діяльності, другий фрагмент коду (TextView t1 .....) знаходиться в обчислювальній діяльності
додано Автор Arif YILMAZ, джерело
Ви намагаєтесь отримати доступ до даних з однієї діяльності в іншу? Ви сказали діалог, але з коду це показує, що ви починаєте нову діяльність
додано Автор Swapnil, джерело
Покажіть повний код, де ви намагаєтеся отримати TextView. Чи є цей код в активності Caclulator?
додано Автор Plato, джерело
прочитайте наведену нижче відповідь про те, як відправити дані до другої активності
додано Автор Plato, джерело
Що означає значення t1, якщо ви спробуєте це: 'Textview t1 = (TextView) MainActivity.this.findViewById (R.id.txt_cad_alis)'
додано Автор Alex248, джерело

8 Відповіді

Оголосіть TextView як змінну-член (за межами методу, можливо, одразу після оголошення класу). Потім ініціалізуйте TextView в onCreate()

public class MyActivity extends Activity
{
    TextView t1;

    public void onCreate(...)
    {
        ...
        t1 = (TextView) findViewById(R.id.txt_cad_alis);
        ...
    }

then use something like String text = ti.getText().toString() to get the text inside your Dialog

2
додано

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

Intent myIntent = new Intent(MainActivity.this, Calculator.class);
myIntent.putExtra("value", t1.getText().toString());
MainActivity.this.startActivity(myIntent);

У класі Calculator легко отримати значення:

protected void onCreate(Bundle savedInstanceState) {
    ...
    String textViewValue = getIntent().getStringExtra("value");
}
1
додано

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

Intent myIntent = new Intent(MainActivity.this, Calculator.class);
myIntent.putExtra("value", t1.getText().toString());
MainActivity.this.startActivity(myIntent);

У класі Calculator легко отримати значення:

protected void onCreate(Bundle savedInstanceState) {
    ...
    String textViewValue = getIntent().getStringExtra("value");
}
1
додано

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

Ви повинні отримати значення від TextView, коли натискається кнопка і поміщає її в намір.

Button calc = (Button) findViewById(R.id.btn_converter);
calc.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
        Textview t1 = (TextView) findViewById(R.id.txt_cad_alis);
        String value = t1.getText().toString();
        Intent myIntent = new Intent(MainActivity.this, Calculator.class);
        intent.putExtra("aKey", value);
        MainActivity.this.startActivity(myIntent);
    }
});

Потім у методі onCreate (), який виконує вашу другу діяльність, ви можете отримати таке значення:

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    Intent i = getIntent();
        if (i.hasExtra("aKey")){
             String value = i.getStringExtra("aKey");   
        }
  }
1
додано
дуже тобі дякую. всі відповіді були корисними, але мені довелося вибрати відповідь. Я підняв усі важливі відповіді.
додано Автор Arif YILMAZ, джерело

Оголосіть атрибут class для t1 TextView і отримайте його посилання на onCreate() для MainActivity. Потім, безпосередньо перед запуском CalculatorActivity, отримайте значення t1 і передайте його через Intent. У цьому випадку через "myIntent". Сподіваюся, це допомагає.

1
додано

Одне з важливих речей, щоб запам'ятати тут, є інкапсуляція - ви, звичайно, НЕ повинні бути безпосередньо доступними для перегляду, що належить до MainActivity з діалогу. Це не лише порушує найкращі практики та принцип інкапсуляції, але також призведе до серйозних головних болю в дорозі, якщо ви коли-небудь захочете повторно використовувати своє діалогове вікно в іншому контексті.

Ідея полягає в тому, що будь-який індивідуальний вигляд (як-от ваш діалог) повинен бути корисним в будь-якій ситуації, якщо надається потрібна інформація, і не повинен спиратися на існування певних полів у його батьківському класі.

Що потрібно зробити, це отримати значення текстового поля в onClick, а потім передавати його в наміри діалогу.

1
додано

Одне з важливих речей, щоб запам'ятати тут, є інкапсуляція - ви, звичайно, НЕ повинні бути безпосередньо доступними для перегляду, що належить до MainActivity з діалогу. Це не лише порушує найкращі практики та принцип інкапсуляції, але також призведе до серйозних головних болю в дорозі, якщо ви коли-небудь захочете повторно використовувати своє діалогове вікно в іншому контексті.

Ідея полягає в тому, що будь-який індивідуальний вигляд (як-от ваш діалог) повинен бути корисним в будь-якій ситуації, якщо надається потрібна інформація, і не повинен спиратися на існування певних полів у його батьківському класі.

Що потрібно зробити, це отримати значення текстового поля в onClick, а потім передавати його в наміри діалогу.

1
додано

Дві можливі причини:

  1. You are not calling setContentView() in your onCreate(), or you are passing the wrong layout id to setContentView().
  2. txt_cad_alis is not the right id of the textview.
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 и т.д.