Re: Переключение между экранами приложения

Здравствуйте, Александр.
Впечатлён Вашей манерой изложения материала, а также глубоко разделяю неравнодушие к зверемурам. У меня их двое))
Спасибо за содержательные уроки.
У меня такая проблема:
в полях EditText эмулятора не отображается кириллица.

Re: Переключение между экранами приложения

Нужно подключить русский язык в настройках клавиатуры

Re: Переключение между экранами приложения

Здравствуйте.  Когда мы принимаем значения результатов  с другой активности и объявляем метод

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);


зачем нужна строчка с обработчиком в примере
super.onActivityResult(requestCode, resultCode, data);

ведь и без неё всё работает?

Re: Переключение между экранами приложения

Если работает, то не пишите. Я не запрещаю. А вообще поищите информацию по слову super в Java

55 (edited by iorgo 2016-10-29 03:18:58)

Re: Переключение между экранами приложения

Александр, Вы бы не могли объяснить зачем и как применяется второе значение default_value в методе getIntExtra("name", 0);     Вот этот ноль. Гуглю, везде пишут - значение по умолчанию. Как это понимать? И почему где-то в примерах ноль, где-то единица.

И второй вопрос.  А вот если допустим необходимо поменять цвет фона на другой активности. Кнопка на одной, а цвет меняем на другой. Возможны ли какие-то варианты на подобие prog.setBackgroundColor(ContextCompat.getColor(prog.this, R.color.yellowColor)), когда меняем фон на той же самой активности.    prog - класс, где кнопка, а цвет например меняем в классе prog2.   Вот такой вариант не проходит ....(ContextCompat.getColor(prog2.class, R.color.yellowColor)).  Или это решается только с помощью Intent, putExtra, getIntExtra и т. д.?

Re: Переключение между экранами приложения

Значение по умолчанию используется, чтобы не возникло ошибки, если никакого значения не существует. А число может быть любым - 0, 1, 42.
Менять цвет в другой активности нужно через Intent. Нужно считать два экрана независимыми сущностями, которые ничего не знают друг про друга и обмениваются сообщениями.

Re: Переключение между экранами приложения

Здравствуйте.

В макете в LinearLayout размещены кнопки:
   <Button
        android:id="@+id/Button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Комоды"
        android:tag="Комоды"
        android:onClick="onButtonClickMainActivity"
        />

    <Button
        android:id="@+id/Button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Кровати"
        android:tag="Кровати"
        android:onClick="onButtonClickMainActivity"
        />

    и т.д...

    <Button
        android:id="@+id/Button89"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Тумбочки"
        android:tag="Тумбочки"
        android:onClick="onButtonClickMainActivity"
        />
*********************************************
В обработчике onButtonClickMainActivity в новую активность надо передать текст кнопки для идентификации.

    public void onButtonClickMainActivity(View view) {
        Intent intent = new Intent(this, Main2Activity.class);
        String cNameMebel = view.getTag().toString();
        intent.putExtra("MebelName",cNameMebel);
        startActivity(intent);
    }

Подскажите, как можно считать текст из нажатой кнопки в обработчике?
К сожалению, использовать
    view.getText() - не получилось - как будто нет такого метода для кнопки;
а использование
    view.getTag() - вызывает необходимость в макете многократно указывать
        android:tag, значение которого совпадает с android:text.

Можно ли в обработчике сразу получить доступ к android:text? Или без android:tag все же не обойтись?

Re: Переключение между экранами приложения

У класса View нет метода getText(), поэтому его нужно привести к классу Button

    public void onClick(View view) {
        TextView infoTextView = (TextView) findViewById(R.id.textView);

        Button button = (Button)view;
        String buttonText = button.getText().toString();
        infoTextView.setText(buttonText);
    }

Re: Переключение между экранами приложения

Добрый день, Александр.
Благодарю за Ваш труд и предоставленные уроки.
Столкнулся с следующей проблемой.
В разделе урока "Передача данным между активностями", на второй активности предлагается создать TextView и заполнить его инициализированными переменными.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);

    String user = "ЖЫвотное";
    String gift = "дырку от бублика";

    TextView infoTextView = (TextView)findViewById(R.id.textViewInfo);
    infoTextView.setText(user + " , вам передали " + gift);
}

Вероятно я что-то пропустил или допустил ошибку при написании застрял на строке
TextView infoTextView = (TextView)findViewById(R.id.textViewInfo);
В частности красным подсвечивается textViewInfo, я так понимаю он не был ранее объявлен данный объект и в этом трабл. Если же я например в second_activity.xml его объявляю получаю ошибку при компиляции
Error:(17, 33) error: illegal start of type
Error:(17, 43) error: non-static method findViewById(int) cannot be referenced from a static context
Error:(17, 56) error: incompatible types: View cannot be converted to TextView
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

Подскажите пожалуйста где была опущена ошибка

Re: Переключение между экранами приложения

Я не вижу ошибок  в вашем коде. Где-то в другом месте ошиблись. Надо видеть весь код класса и разметки.

Re: Переключение между экранами приложения

Спасибо, нашел ошибку.
Теперь возникла другая.
В разделе "Кто подставил кота Ваську - получаем результат обратно"
На MainActivity создаю метод onActivityResult
Получаю ошибку в строке "String thiefName = data.getStringExtra(SecondActivity.THIEF);"
Ошибка подсвечена в THEIF
Cannot resolve symbol 'THEIF'
Подсказка ввиде красной лампы с лева предлагает создать класс

Re: Переключение между экранами приложения

А переменная THIEF у вас прописана?

Re: Переключение между экранами приложения

alexander.klimoff wrote:

А переменная THIEF у вас прописана?

Да во второй активности прописана переменная вот листинг
package com.example.psannikov.myfouthproject;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();

            }
            public final static String THIEF = "com.example.psannikov.myfouthproject";
            public void onRadioCkick (View v) {
                Intent answerInstent = new Intent();

                switch (v.getId()) {
                    case R.id.radioDog:
                        answerInstent.putExtra(THIEF, "Сраный пес");
                        break;
                    case R.id.radioCrow:
                        answerInstent.putExtra(THIEF, "Чертова варона");
                        break;
                    case R.id.radioCat:
                        answerInstent.putExtra(THIEF, "Да ты гонишь");
                        break;
                }
                setResult(RESULT_OK,answerInstent);
                finish();
            }

        });

    }

}

Re: Переключение между экранами приложения

Переменная должна быть прописана в классе, а не в методе onCreaate()

Re: Переключение между экранами приложения

Доброго времени суток. Проблема, подчеркивает: public class StartActivity extends Activity implements OnClickListener и (Button) findViewById(R.id.activity_main2);

package ru.oshlakov.twopage2;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class StartActivity extends Activity implements OnClickListener
{
    Button mButton;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButton = (Button) findViewById(R.id.activity_main2);
        mButton.setOnClickListener(this);
    }
    public void onClick(View v)
    {
        Toast.makeText(this, "About programm", Toast.LENGTH_SHORT).show();
    }
}

Re: Переключение между экранами приложения

Читайте сообщения об ошибках, которые выводит студия. Там все написано.

Re: Переключение между экранами приложения

При создании Активити, у второго не отображается Title Bar при наследовании класса от Activity (как указано в статье), для того что бы тайтл бар появился нужно наследоваться от AppCompatActivity.
Информация для исправления в статье.

Re: Переключение между экранами приложения

Внешний вид активности никак не связан с этим уроком. Всё прекрасно отображается, если использовать правильные настройки.

Re: Переключение между экранами приложения

Здравствуйте, вы так логично  и понятно излагаете материал, но в этой главе возникла проблема.
В разделе  "получаем результат обратно"  я копирую xml код из примера и сразу же в нём возникают ошибки, нет картинки и string в values,  я добавил сам картинку в drawable  и strings, теперь уже ничего не подсвечивается красным, мол чего не хватает. Но всё равно осталась ошибка xml declaration should precede all document content

Подскажите, как исправить её? Не могу выполнять задание дальше, ничего не компилируется.
Ну и было бы не плохо если бы вы предупреждали, что нужно некоторые ресурсы добавить самостоятельно или это сделано специально для развития навыков самостоятельной работы ? Не понятно.

Re: Переключение между экранами приложения

Значит где ошиблись. Нужно не копировать, а писать код самому. Тогда подобные ошибки возникать не будут.
Удивительно слушать жалобу, что не предупреждают о самостоятельной работе. Хорошо, предупреждаю - нужно думать самостоятельно. Надеюсь, вам поможет.

Re: Переключение между экранами приложения

Здравствуйте.
Вот такой вопрос возник в ходе этого урока.
Сделал 3 активности.
На первой 2 кнопки, поля ввода и пара текствьюв. Соответственно по кликам кнопок открывается 2 и 3 активности.
На второй активности кнопка (возвращающая на 1 активность), текствьюв и 3радиобатона.
На третье активности кнопка перехода на 2 активность.
Собственно все работает по всему уроку.
ЕДИНСТВЕННОЕ крашится приложение когда с 1 активности переходим на 3 и от туда по щелчку пытаемся уйти на вторую.
Я так понимаю что дело в том что 1 и 2 активность работают с результатами, а третья нет. Потому, что до того как прикрутил передачу результатов переходы все между активностями работали.
Пробовал в 3 активность тоже добавить отправку RESULT_CANCELED нечего не изменилось.
В чем может быть проблема?
З.Ы. надеюсь объяснил понятно. ))

Re: Переключение между экранами приложения

alexander.klimoff wrote:

Вполне возможно, что в новых версиях у Activity теперь нет заголовка по умолчанию. Тогда его надо включить, выбрав нужную тему или программно. Раньше как-раз было наоборот, у любой активности был заголовок.

Как это сделать или где об этом прочитать в вашем блоге?

Re: Переключение между экранами приложения

Читать нужно не у меня, а в документации.

Re: Переключение между экранами приложения

alexander.klimoff wrote:

Читать нужно не у меня, а в документации.

Жаль. Надеялась, что в каком-нибудь из уроков найду ответ. Ну, или в теории. А документация для меня пока что тёмный-тёмный лес.
Спасибо вам, итак много и очень обстоятельно объясняете.

Re: Переключение между экранами приложения

Александр, спасибо за труд и у меня пара вопросов.
1.  При передаче строки из одной активити в другую посредством Intent, объвляю переменную, как вы и советовали по-правильному:
      public final static String USER = "com.example.sergey.onsecondactivity.USER";
передаю строку:
      intent.putExtra(USER, userEditText.getText().toString());
Вопрос, при получении в качестве ключа что использовать?
Пробовал:
      String user = getIntent().getExtras().getString("user");
но получаю null.
Пришлось снова объявить такую же переменную в новой активити и её использовать в качестве ключа, т.е.:
      String user = getIntent().getExtras().getString(USER);
Так работает. Вопрос - это правильное решение?

2. Опять же, при передаче строк (вы писали добавить поле "От кого" и вывести), хотел в новой активити вывести "От кого" чуть ниже основного сообщения. Для этого в файл разметки второй активити добавил ещё одно поле TextView с другим id и сдвинул ниже первого.
При отправке сообщения, приложение падает. Долго не мог понять причину, но у брав этот TextView, всё заработало.
Неужели нельзя добавлять несколоько TextView?

Спасибо.