Android / Отправка контекста активности через намерение - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть 5 или около того действий в Android (2 из них были показаны ниже), которые имеют общий Навигационный ящик.Если я вхожу в какую-либо учетную запись из окна навигации, после успешного входа в систему необходимо загрузить ранее показанное действие.Можно ли отправить контекст активности через намерение?

FirstActivity.java

Intent intent1 = new Intent(FirstActivity.this, Login.class);
intent1.putExtra("activity", "FirstActivity");
startActivity(intent1);
finish();

SecondActivity.java

Intent intent2 = new Intent(SecondActivity.this, Login.class);
intent2.putExtra("activity", "SecondActivity");
startActivity(intent2);
finish();

При поиске имени действия, которое нужно вернуть ввход в систему, после успешного входа.

Login.java

Intent intent3 = getIntent();
String activity = intent3.getStringExtra("activity");
...
Intent intent4 = new Intent(Login.this, Class.forName(activity));
startActivity(intent4);
finish();

возвращает следующее сообщение об ошибке:

W/System.err: java.lang.ClassNotFoundException: Home
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:453)

Кто-нибудь знает, как это исправить?

Использование intent1.putExtra("activity", String.valueOf(FirstActivity.this)); также не работает, оно говорит, что com.example.nativeapp.FirstActivity@6a7640 является недопустимым именем класса.

Должен ли я преобразовать контекст действия в Serializable или Parcelable или дажеCharSequence, когда я пытаюсь отправить эти значения переменных через намерение?Кажется, что Activity или AppCompatActivity не наследуют Serializable или Parcelable, чтобы это сработало.CharSequence, кажется, не имеет большого значения от использования String.

Я знаю, что могу создать свой собственный класс для хранения глобальных переменных и контекстов активности, и моя активность может наследоваться от этого, но так как моя активность уже наследует NavigationDrawerМоя деятельность не может наследовать второй класс.Могу ли я объявить это как интерфейс и наследовать интерфейс для доступа к значениям глобальной переменной из интерфейса?Методы получения и установки, безусловно, не могут работать в интерфейсе, поскольку в интерфейсе не допускается реализация функций и объявление значений переменных.

Одна из причин, по которым я решил принять решение сделатьиспользование центрального суперкласса для хранения значений переменных и их изменения из подклассов всякий раз, когда я пытаюсь перейти от одного действия к другому, заключается в том, что контексты действия подобны этому, я не уверен, как передать их через намерения.Это намерение, которое также должно быть в состоянии передавать внутри других центральных глобальных переменных мобильного приложения от одного класса активности к другому.Центральный суперкласс, такой как NavigationDrawer, который является отличным кандидатом, поскольку все мои классы активности Android наследуются от него, было бы лучше использовать, если в нем хранятся все центральные глобальные переменные, и они меняются из подклассов всякий раз, когда я пытаюсь переместитьот одного занятия к другому.

Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

вы пытаетесь запомнить последнее действие и затем начинаете следующее конкретное действие.Это способ сделать это

изменить это

Intent intent = new Intent(Login.this, Class.forName(activity));
startActivity(intent);
finish();

на это -

  Intent intent = getIntent();
    String lastActivity = intent.getStringExtra("activity"); // lastActivity
    if (lastActivity.equalsIgnoreCase("FirstActivity")) {
        Intent intent = new Intent(Login.this, FirstActivity.class);
        startActivity(intent);
        finish();
    } else if (lastActivity.equalsIgnoreCase("SecondActivity")) {
        Intent intent = new Intent(Login.this, SecondActivity.class);
        startActivity(intent);
        finish();
    }

создать общий метод для оптимизации вашего кода

0 голосов
/ 25 сентября 2019

Вам необходимо указать полное имя класса.Вместо "FirstActivity" вам нужно передать "my.fully.qualified.class.name.FirstActivity", где вы указали полное имя класса.

...