Загрузка данных
Прочитал задание полностью — теперь всё точно по документу. Даю готовый проект целиком.
**Важное по заданию, что учёл:**
- Обязателен TextView с ФИО и группой на экране 1
- Пример текста для экрана 2 — я взял пример музея прямо из задания
- Требование "не Form1/button3" — все id осмысленные, CamelCase
- Требование "масштабируемая компоновка" — использую `match_parent`/`wrap_content`, никаких фиксированных `dp` под размеры экрана
- Требование "заголовок окна не по умолчанию" — прописал `android:label` для каждой Activity в манифесте
- Требование "кнопка Назад между окнами" — реализовано явными кнопками (уже в задании), плюс системная кнопка Back работает сама по себе через `startActivity`
- Название приложения должно быть осмысленным — назвал `PraktikaMuseum` (замени под свою тему практики)
---
## AndroidManifest.xml (только суть — activity-блоки)
```xml
<activity
android:name=".MainActivity"
android:label="Ввод данных о практике"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".PracticeInfoActivity"
android:label="Место прохождения практики" />
<activity
android:name=".FeedbackActivity"
android:label="Обратная связь" />
```
---
## activity_main.xml (Экран 1)
```xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/tvActivityTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Активность 1"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tvStudentInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Иванов Иван Иванович, группа ИС-31" />
<EditText
android:id="@+id/etUserInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="Введите текст" />
<Button
android:id="@+id/btnClearText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Стереть" />
<Button
android:id="@+id/btnGoToPractice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Перейти на 2 экран" />
<Button
android:id="@+id/btnGoToFeedback"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Обратная связь" />
</LinearLayout>
```
## MainActivity.java
```java
package ru.dgtt.praktikamuseum;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
/**
* Стартовый экран приложения.
* Позволяет ввести текст, очистить его и перейти на экран с информацией
* о практике или на экран обратной связи.
*/
public class MainActivity extends AppCompatActivity {
private EditText etUserInput;
private Button btnClearText, btnGoToPractice, btnGoToFeedback;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etUserInput = findViewById(R.id.etUserInput);
btnClearText = findViewById(R.id.btnClearText);
btnGoToPractice = findViewById(R.id.btnGoToPractice);
btnGoToFeedback = findViewById(R.id.btnGoToFeedback);
btnClearText.setOnClickListener(v -> etUserInput.setText(""));
btnGoToPractice.setOnClickListener(v -> {
Intent intent = new Intent(MainActivity.this, PracticeInfoActivity.class);
intent.putExtra("KEY_TEXT", etUserInput.getText().toString());
startActivity(intent);
});
btnGoToFeedback.setOnClickListener(v -> {
Intent intent = new Intent(MainActivity.this, FeedbackActivity.class);
startActivity(intent);
});
}
}
```
---
## activity_practice_info.xml (Экран 2)
```xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/tvActivityTitle2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Активность 2"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tvPracticeInfo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="МБУК «Добрянский историко-краеведческий музей»\nНаш адрес: ул. Жуковского, 23\nГрафик работы: вт-сб 10:00–17:00; вс 11:00–17:00\nНаш сайт: dobrmuseum.ru\nКонтакты: +7 (34265) 3-78-00" />
<TextView
android:id="@+id/tvUserInputResult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp" />
<Button
android:id="@+id/btnBackToMain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Вернуться на главный экран" />
</LinearLayout>
```
## PracticeInfoActivity.java
```java
package ru.dgtt.praktikamuseum;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
/**
* Экран с информацией о месте прохождения практики.
* Отображает текст, переданный с главного экрана.
*/
public class PracticeInfoActivity extends AppCompatActivity {
private TextView tvUserInputResult;
private Button btnBackToMain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_practice_info);
tvUserInputResult = findViewById(R.id.tvUserInputResult);
btnBackToMain = findViewById(R.id.btnBackToMain);
// Получаем текст, переданный с 1 экрана
String passedText = getIntent().getStringExtra("KEY_TEXT");
tvUserInputResult.setText(passedText);
btnBackToMain.setOnClickListener(v -> {
startActivity(new Intent(PracticeInfoActivity.this, MainActivity.class));
finish();
});
}
}
```
---
## activity_feedback.xml (Экран 3)
```xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/tvActivityTitle3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Обратная связь с пользователем"
android:textSize="20sp"
android:textStyle="bold" />
<EditText
android:id="@+id/etFeedback"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="Введите ваш отзыв" />
<Button
android:id="@+id/btnSendFeedback"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Отправить" />
<Button
android:id="@+id/btnBackToMain2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Перейти на 1 экран" />
</LinearLayout>
```
## FeedbackActivity.java
```java
package ru.dgtt.praktikamuseum;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
/**
* Экран обратной связи. Позволяет пользователю оставить отзыв
* и вернуться на главный экран.
*/
public class FeedbackActivity extends AppCompatActivity {
private EditText etFeedback;
private Button btnSendFeedback, btnBackToMain2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_feedback);
etFeedback = findViewById(R.id.etFeedback);
btnSendFeedback = findViewById(R.id.btnSendFeedback);
btnBackToMain2 = findViewById(R.id.btnBackToMain2);
btnSendFeedback.setOnClickListener(v ->
Toast.makeText(this, "Спасибо за отзыв!", Toast.LENGTH_SHORT).show());
btnBackToMain2.setOnClickListener(v -> {
startActivity(new Intent(FeedbackActivity.this, MainActivity.class));
finish();
});
}
}
```
---
Замени `ru.dgtt.praktikamuseum` на свой реальный пакет (посмотри в текущих файлах проекта) и ФИО/группу на свои. Всё остальное соответствует пунктам задания дословно.