Объясните почему нажатие кнопок все равно работает

81
13 января 2022, 00:50
package com.example.writeandread;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
//import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class MainActivity extends AppCompatActivity {
    private EditText edit;
    private TextView txtShow;
//    private Button btn1, btn2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//        btn1 = (Button)findViewById(R.id.button);
//        btn2 = (Button)findViewById(R.id.button2);
        edit = (EditText)findViewById(R.id.editText);
        txtShow = (TextView)findViewById(R.id.textView);
    }
    public void read (View view){
        try {
            FileInputStream fileInput = openFileInput("example.txt");
            InputStreamReader reader = new InputStreamReader(fileInput);
            BufferedReader buffer = new BufferedReader(reader);
            StringBuffer strBuffer = new StringBuffer();
            String lines;
            while ((lines = buffer.readLine()) != null){
                strBuffer.append(lines + "\n");
            }
            txtShow.setText(strBuffer.toString());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void write (View view){
        String myTxt = edit.getText().toString();
        try {
            FileOutputStream fileOutput = openFileOutput("example.txt", MODE_PRIVATE);
            fileOutput.write(myTxt.getBytes());
            fileOutput.close();
            edit.setText("");
            Toast.makeText(MainActivity.this, "Текст сохранен", Toast.LENGTH_LONG).show();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Смотрю видеоурок на тему считывания и записи введеного текста в файл на устройство (https://www.youtube.com/watch?v=l3DR9PjyIYw&list=PL0lO_mIqDDFW13-lP3IgK9lZoM1M-oPl4&index=15&t=0s).

Так вот вопрос, почему добавленные мною кнопки в режиме "дизайн" в AndroidStudio РАБОТАЮТ без подключения соответствующей библиотеки - "Button"(я ее закомментировал) и к тому же без подключения функции прослушивания нажатий кнопок setOnClickListener?

Answer 1

Вы должны понимать что ничего не может работать без реализации, если кнопка визуально работает, это не означает что она выполняет ожидаемые функции: написали текст, нажали записать, удалили текст, нажали прочитать, работает? А так и должно быть, ибо у вас есть реализация кнопок: public void write (View view){} и второй метод public void read (View view){}, заккоментируйте их или переименуйте и вы получите ошибку компиляции так как у вас в коде вьюшки кнопки указан параметр android:onClick="read" (это не правильное именование предпочтительнее писать: onClickRead), который описывает реализацию. В Java как мне помнится нужно было ещё писать @Override, но это не точно. Почему вам не нужно указывать ИД кнопки? За вас это делает сама активити которая при прорисовке экрана находит вьюшку с данным атрибутом, сопоставляет его с таким же методом в коде (этот метод обязательно должен принимать View) и всё. Это дин из методов обработки нажатий советую к изучению.

READ ALSO
Жесты в приложении android

Жесты в приложении android

Как сделать так, чтобы пр свайпе снизу вверх менялась картинка (при каждом новом жесте)? Те есть картинки, которые меняются с помощью seelbar,...

85
Что включено в процесс инициализации класса?

Что включено в процесс инициализации класса?

Конкретно на примере: 1Впервые с момента запуска программы обратились к static-члену (тип int) класса

108
Изменение сериализованного класса

Изменение сериализованного класса

Подскажите пожалуйста, имеется сериализации класс, в нем необходимо переопределить метод например toString, после переопределения ранее сериализованные...

90
Вернуть поток в начальное положение

Вернуть поток в начальное положение

Реализован конвейер, состоящий из Manager, Reader, Executor1, Executor2, Writer, наследованные от Runnable (Executor1 дергает Reader, получает от него данные, обрабатывает,...

185