Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
awmdim7
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 9
1

Открытие второго активити и заполнение в нём TextView

10.09.2019, 17:29. Просмотров 834. Ответов 2

Здравствуйте. В Java я новичок, вообще в языках программирования новичок. Разбираюсь в html и css. Сейчас мне нужно создать простое приложение на андроид, в течение нескольких дней пытаюсь при помощи Гугла это сделать. Но не получается.

Что пытаюсь сделать? Есть первое активити, в нём находится несколько кнопок, которые по клику открывают другие активити, содержащие элемент TextView. Словами вебмастера, есть страничка, на ней ссылки, при клике по ссылке мы попадаем на другую страничку с текстом. 10 ссылок - 10 страничек, + первая страничка (первое активити). Я смог при помощи Гугла это сделать. В проекте 11 активити, 1 - основное, 10 - "второстепенных", после клика по соответствующей кнопке в первом активити пользователь переходит в нужное активити. То есть, кликнул по кнопке 3 - попал в активити 3, кликнул по 4 - попал в 4. Думаю, понятно.

И тут я задумался: а можно ли всё это сделать лишь в двух активити? Первое так и будет с кнопками, а второе будет меняться зависимо от того, какую кнопку нажали. То есть наполнение элемента TextView во втором активити будет меняться зависимо от того, по какой кнопке нажали в первом активити.

Теперь ближе к делу. Всё делается в Андроид студио. Признаюсь сразу, код не мой, я его нашёл на просторах сети и пытаюсь модифицировать под свои задачи. Оставляю в примере только одну кнопку, чтоб не раздувать код. Это activity_main.xml

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
 
 
</androidx.constraintlayout.widget.ConstraintLayout>
Тут, думаю, вопросов нет.

Код MainActivity.java

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.example.myapplication;
 
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //присвоили кнопку к кнопке на леяуте
        Button btn = (Button) findViewById(R.id.button1);
        //повесили на него листенера
        btn.setOnClickListener(new View.OnClickListener() {
 
            @Override
            public void onClick(View v) {
                //переходим с первой на вторую активити
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                //Передаем на следующую активити слово в статическую переменную
                intent.putExtra(SecondActivity.TEXT, "Здесь строка из файла");
                startActivity(intent);
            }
        });
    }
}
Чуть позже я вернусь к параметру "Здесь строка из файла"

activity_second.xml

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SecondActivity">
 
 
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Это не должно быть видно"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
SecondActivity.java

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.example.myapplication;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class SecondActivity extends AppCompatActivity {
 
    // статическая перменная
    public static final String TEXT = "Text";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        //объявляем текствью в который выведем текст
        TextView text = (TextView) findViewById(R.id.textView1);
        //принимаем интент посланый из первой активности
        Bundle extras = getIntent().getExtras();
        //выводим что получили
        text.setText(extras.getString(TEXT));
    }
}
Здесь всё работает, как задумано автором. При клике по кнопке открывается второе активити и у него в TextView вместо "Это не должно быть видно" отображается "Здесь строка из файла". Получается, в TextView параметр android:text="Это не должно быть видно" преобразовывается в android:text="Здесь строка из файла". Вот эта строка из первого файла MainActivity.java
Java
1
intent.putExtra(SecondActivity.TEXT, "Здесь строка из файла");
заменила собой значение во втором активити. Решив, что дело почти сделано, я изменил строку вот так:
Java
1
intent.putExtra(SecondActivity.TEXT, "@string/text1");
Я был уверен, что теперь в TextView получу значение @string/text1 из файла strings.xml Но не тут то было! При запуске в эмуляторе я вижу саму надпись @string/text1, а не его значение из strings.xml Я предполагал, что в TextView параметр android:text="@string/text1" автоматически обработается и подтянет значение из strings.xml

Как можно это исправить, чтоб код работал корректно? Ткните носом в ошибку, пожалуйста. И правильно ли я понимаю, что тогда останется лишь скопировать этот код
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //присвоили кнопку к кнопке на леяуте
        Button btn = (Button) findViewById(R.id.button1);
        //повесили на него листенера
        btn.setOnClickListener(new View.OnClickListener() {
 
            @Override
            public void onClick(View v) {
                //переходим с первой на вторую активити
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                //Передаем на следующую активити слово в статическую переменную
                intent.putExtra(SecondActivity.TEXT, "Здесь строка из файла");
                startActivity(intent);
            }
ещё 9 раз, изменив id кнопок и каждый раз подставляя в строку

Java
1
intent.putExtra(SecondActivity.TEXT, "Здесь строка из файла");
нужное мне значение, @string/text2, @string/text3 и так далее? И во втором активити в TextView будет отображаться нужный контент зависимо от того, по какой кнопке нажали. Разумеется, в xml файле первой активити кнопки я добавлю.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2019, 17:29
Ответы с готовыми решениями:

Ссылка из textView на другую активити
Добрый день, Есть textView в которое выводится различная текстовая информация из базы данных....

Как реализовать обращение из SurfacView к TextView в основной Активити
Всем Добрый День! Не знаю правильно или нет, но хотел сделать разметку поделив экран на две...

TextView: неправильно работает Listener для перехода на другую активити
Суть такова: есть фрагмент, в нем есть TextView, которое я хочу использовать как линк для перехода...

Открытие нужного активити
Здравствуйте. Имеется некая служба, которая работает как foreground, при возникновение...

WPF: при наличии второго монитора, запускать форму на нём
Нужно при наличии 2 монитора, запускать форму на нём.

2
ExFau$t
920 / 731 / 215
Регистрация: 08.05.2012
Сообщений: 3,525
10.09.2019, 19:02 2
Лучший ответ Сообщение было отмечено awmdim7 как решение

Решение

Вместо "@string/text1" - передаёшь R.string.text1.

Потом
Java
1
text.setText(extras.getInt(TEXT));
Добавлено через 4 минуты
Цитата Сообщение от awmdim7 Посмотреть сообщение
ещё 9 раз, изменив id кнопок и каждый раз подставляя в строку
слушатель можно сделать один и назначить его прямо в разметке ко всем кнопкам, в самом слушателе сделать switch-case, где по id view можно выставлять текст в intent.
1
awmdim7
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 9
10.09.2019, 19:43  [ТС] 3
Благодарю, добрый человек!
Цитата Сообщение от ExFau$t Посмотреть сообщение
Вместо "@string/text1" - передаёшь R.string.text1.
Сделал так:
Java
1
intent.putExtra(SecondActivity.TEXT, "R.string.text1");
И приложение стало закрываться при нажатии на кнопку. Почесал репу, внимательно прочёл сообщение, заменил на:
Java
1
intent.putExtra(SecondActivity.TEXT, R.string.text1);
И всё заработало! Сегодня уже вечер, завтра буду играться со слушателем, что всё организовать по фен-шуй. Если не справлюсь, то буду снова спрашивать, имея на руках хоть какой-то код.
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2019, 19:43

Повторное открытие проекта с ранее на нём нажатой кнопкой
добрый день. я новичок не судите строго. несколько дней ломаю голову как сделать так чтобы при...

Открытие и закрытие лотка CD-ROM-a и проверка наличия диска в нём
Нужно реализовать .bat файл который бы открывал и закрывал CD-ROM. Также командный файл должен...

Открытие второго проекта
В Решении имеется два проекта. Один WPF с .NET Framework 4.6.1, а второй WinForm проект с .Net...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.