Java статически типизированный язык, что означает когда объявлена переменная с каким-либо типом значения другого типа этой переменной присвоить нельзя, потому что при объявлении типа в оперативной памяти выделяется место для хранения значения объявленного типа. Нарпимер для типа int – 4 байта, float – 4 байта, char – 2 байта, String – это массив значений типа char, число байтов = количество символов * 2.
Наиболее часто используемые типы это:
int – целое число (0, 1, 10);
float – число с дробной частью (0.1, 0.05, 3.14);
char – символ ('b', 't', 'd');
String – строка ("Привет, как жизнь?", "Какая-нибудь строка", "Строки заключаются в двойные кавычки, а символы в одинарные").
Для экземпляров классов типом считается название класса, например при объявлении экземпляра TextView используется TextView tv = findViewById(R.id.some_id);
Кроме встроенных классов по мере необходимости можно определять и использовать свои классы, что называется пользовательскими классами. Членами пользовательских классов могут быть объекты каких-угодно классов с каким-угодно типом. Например в следующем примере программы используется пользовательский класс Pupil членами которого являются три переменные целочисленного типа – int, в котором хранятся возраст, вес и оценка и одна перменная строкового типа для хранения названия.
В языке Java есть также понятие литералы, это когда значение какого-либо типа используется в коде напрямую, например int a = 10 + b;. 10 это литерал целочисленного типа. Есть ещё один тип для хранения чисел с дробной частью – тип double, и использование литералов числа с дробной частью может выдавать ошибку, потому что возникает неоднозначность и компилятор не знает выделить для литерала 4 байта для хранения как float значения или 8 байт для хранения как double значения, поэтому при использовании литералов типа float после числа следует писать f, например float b = 1.14f + 2;
Создайте новый проект на основе шаблона Empty Activity. В этом примере показывается разработка приложения для динамического добавления виджетов в контейнер на основе вводимых пользователем данных. После написания кода заполните текстовые поля затем нажмите на кнопку "Добавить", после нажатия на кнопку "Добавить" в верхней части экрана должны добавляться новые TextView с введенной вами информацией. Откройте файл MainActivity.java и после блока импортов напишите этот код:
// Пользовательский класс для группирования информации об ученике
class Pupil {
// Переменная для хранения имени ученика
String name;
// Для хранения возраста
int age;
// Для хранения веса
int weight;
// Для хранения оценки
int mark;
// Каждый класс может иметь конструктор для объявления нового экземпляра и передачи необходимых значения для переменных за один раз. Конструкторы в отличии от других функций не имеют типа, а названием для функции служит название класса, затем идут скобки () в которых пишутся принимаемые параметры. В данном случае принимаются три параметра и присваиваются переменным класса
public Pupil(String name, int age, int weight, int mark) {
// Ключевое слово this служит
this.name = name;
this.age = age;
this.weight = weight;
this.mark = mark;
}
}
public class MainActivity extends AppCompatActivity {
// Константы обяъвляются также как и переменные только с ключевым словом final
final int someFinal = 1;
// Пременные для хранения целого числа,
int someInt = 0;
// числа с дробной частью,
float someFloat = 0.9f;
// одного символа,
char someChar = 'a';
// строки.
String someString = "Hello my name is Khurshed";
// Тип переменной container равен LinearLayout
LinearLayout container;
// Ссылки на поля с текстом для добавления в массив
EditText nameTxt;
EditText weightTxt;
EditText ageTxt;
EditText markTxt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
container = findViewById(R.id.container);
// Объявление массива типа ArrayList для хранения объектов класса Pupil
final ArrayList<Pupil> pupils = new ArrayList<>();
// Добавление новых элементов в массив pupils осуществляется через метод add() класса ArrayList
pupils.add(new Pupil("Ibrohim", 20, 85, 5));
pupils.add(new Pupil("Abdurahmon", 18, 90, 6));
pupils.add(new Pupil("Khurshed", 25, 80, 4));
// Цикл for для итерации через все элементы добавленные в массив pupils
for (int i = 0; i < pupils.size(); i++) {
TextView tv = new TextView(this);
String s = String.format("Имя: %s, Возраст: %d, Вес: %d, Оценка: %d", pupils.get(i).name, pupils.get(i).age, pupils.get(i).weight, pupils.get(i).mark);
tv.setText(s);
container.addView(tv);
}
// Нахождение объектов EditText из файла макета
nameTxt = findViewById(R.id.name);
weightTxt = findViewById(R.id.weight);
ageTxt = findViewById(R.id.age);
markTxt = findViewById(R.id.mark);
// Нахождение кнопки из файла макета
Button addToList = findViewById(R.id.addPupil);
// Присваивание обработчик события click для кнопки
addToList.setOnClickListener(new View.OnClickListener() {
// Код обработки события клика на кнопке
@Override
public void onClick(View v) {
// Создание нового объекта класса Pupil, путём получения необходимых значений с EditText полей
Pupil p = new Pupil(
nameTxt.getText().toString(),
Integer.parseInt(ageTxt.getText().toString()),
Integer.parseInt(weightTxt.getText().toString()),
Integer.parseInt(markTxt.getText().toString())
);
// Добавление объекта класса Pupil в массив (ArrayList)
pupils.add(p);
// Программное создание нового TextView
TextView tv = new TextView(MainActivity.this);
// Подготовка строки для указания в качестве текста для TextView
String s = String.format("Имя: %s, Возраст: %d, Вес: %d, Оценка: %d", p.name, p.age, p.weight, p.mark);
// Установка нового значения свойства text переменной tv.
tv.setText(s);
// Показ сообщения об успешном добавлении новой записи в список
Toast.makeText(MainActivity.this, "Добавлена новая запись", Toast.LENGTH_SHORT).show();
// Добавляем новый TextView в котейнер
container.addView(tv);
// Очищаем текстовые поля от введенных текстов
nameTxt.setText("");
weightTxt.setText("");
ageTxt.setText("");
markTxt.setText("");
}
});
}
}
Разметку файла res/layout/activity_main.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">
<!--Этот контейнер необходим для показа добавляемых виджетов-->
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"></LinearLayout>
</ScrollView>
<!--LinearLayout размещения полей ввода-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fefefe"
android:orientation="vertical"
android:padding="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!--TextInputLayout служит для показа подсказки текстового поля и анимирования при получения фокуса со стороны текстового поля. Подсказка указывается через атрибут hint-->
<com.google.android.material.textfield.TextInputLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="Имя">
<!--Внутри виджета TextInputLayout размещается TextInputEditText, который и служит полем для ввода текста-->
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="Возраст">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/age"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.google.android.material.textfield.TextInputLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="Вес">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/weight"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="Оценка">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/mark"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<Button
android:id="@+id/addPupil"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:text="Добавить" />
</LinearLayout>
</LinearLayout>
Реклама