как перейти на другой экран с помощью интерактивной навигации, когда маркер извлекается и сохраняется

Сначала соблюдайте правила инкапсуляции. Создайте поля private. Затем вы хотите иметь getters для полей, которые вам нужны для доступа.

public class GUI {
    private JTextField field = new JTextField();

    public GUI() {
        // pass this instance of GUI to other class
        SomeListener listener = new SomeListener(GUI.this);
    }

    public JTextField getTextField() {
        return field;
    }
}

Затем вы захотите передать свой графический интерфейс любому классу, который должен получить доступ к текстовому полю. Скажите класс ActionListener. Используйте инъекцию конструктора (или «передать ссылку» ) для прохождения класса GUI. Когда вы это сделаете, GUI, на который ссылаются в SomeListener, является одним и тем же, и вы никогда не создадите новый (который не будет ссылаться на тот же самый экземпляр, который вам нужен).

public class SomeListener implements ActionListener {
    private GUI gui;
    private JTextField field;

    public SomeListener(GUI gui) {
        this.gui = gui;
        this.field = gui.getTextField();
    }
}

Хотя вышеупомянутый может работать , он может быть ненужным. Сначала подумайте, что именно вы хотите сделать с текстовым полем. Если какое-то действие, которое может быть выполнено в классе GUI, но вам просто нужно получить доступ к чему-то в классе для его выполнения, вы можете просто реализовать interface с помощью метода, который должен выполнить что-то. Что-то вроде этого

public interface Performable {
    public void someMethod();
}

public class GUI implements Performable {
    private JTextField field = ..

    public GUI() {
        SomeListener listener = new SomeListener(GUI.this);
    }

    @Override
    public void someMethod() {
         field.setText("Hello");
    }
}

public class SomeListener implements ActionListener {
    private Performable perf;

    public SomeListener(Performable perf) {
        this.perf = perf;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        perf.someMethod();
    }
}
0
задан lula 13 July 2018 в 08:54
поделиться

1 ответ

Вы должны перемещаться после маркера, сохраненного как показано ниже:

  storeToken(responseData){
    AsyncStorage.setItem(AUTH_TOKEN, responseData, (err)=> {
      if(err){
        console.log("Something went wrong");
        throw err;
      } else{
        this.props.navigation.navigate('Home'); 
        console.log("Success");
      }
    }).catch((err)=> {
        console.log("error is: " + err);
    });
  }

Код на главном экране:

render() {
    return <View/>
}
0
ответ дан CrazyVK 17 August 2018 в 13:18
поделиться
  • 1
    благодарю вас за интерес и ответ, но в лог-шоу: Invariant Violation: объекты недействительны как ребенок React (найдено: ReferenceError: не удается найти переменную: AUTH_TOKEN). Если вы хотите отобразить коллекцию детей, используйте вместо этого массив. – lula 13 July 2018 в 09:10
  • 2
    Я думаю, проблема с вашим компонентом Home. – CrazyVK 13 July 2018 в 09:16
  • 3
    CrazyVK, я тестировал другие компоненты и те же – lula 13 July 2018 в 09:23
  • 4
    пожалуйста, проверьте после обновления основного экрана, как в моем ответе. – CrazyVK 13 July 2018 в 09:28
  • 5
    CrazyVk я создал тестовый компонент и тот же. import React, {Component} из 'response'; import {View, Text, AsyncStorage} из 'react-native'; class Test extends Component {render () {return (& lt; View / & gt;); }} экспорт теста по умолчанию; – lula 13 July 2018 в 09:31
Другие вопросы по тегам:

Похожие вопросы: