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

1. По первому пункту.  Ключ должен совпадать, не важно как он задан - через переменную или строкой. Только не нужно снова объявлять USER, это статическая переменная, которая вам доступна. Почитайте про статические переменные и избавьтесь этой второй переменной.
2. Странный вопрос. Вы всерьез думаете, что система настолько ущербна, что не позволяет использовать несколько TextView? Очевидно, вы что-то упустили.

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

Здравствуйте, если не трудно подскажите.
вот в этом месте
setContentView(R.layout.activity_main);

буква R стоит красным, и выдает ошибку (cannot resolve symbol 'R')
сколько не пытался не могу понять.

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

и еще такая ошибка
Error:No resource found that matches the given name (at 'label' with value '@string/app_name').
в Манифесте.

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

siragudin,
так а ресурс-то такой - '@string/app_name' - у Вас есть? Не удалили случайно?

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

NeferSky wrote:

siragudin,
так а ресурс-то такой - '@string/app_name' - у Вас есть? Не удалили случайно?

с этим разобрался(опять невнимательность)

но вот эта ошибка
setContentView(R.layout.activity_main);
буква "R" стоит красным, и выдает ошибку (cannot resolve symbol 'R')
сколько не пытался не могу понять.

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

siragudin,
Странно то, что я Вам отвечал про "cannot resolve symbol R", а поста своего найти не могу...
В общем, такое ощущение, что у Вас класс MainActivity в состав пакета не входит. Самой первой строкой в файле "MainActivity.java" должно быть что-то типа "package com.example.myapp".

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

с этим
"package com.example.myapp"
все с порядке.
я не знаю что происходит в андроид студио но эта проблема появляется и сама исчезает(так и не понял почему)

я когда добавил вторую кнопку функция onClick не работает (пишет что не используется)
вот код

package com.example.myappactivity;

import android.widget.Button;
import android.content.*;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

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

    public void onButtonClick(View view) {
        Intent intent = new Intent(MainActivity.this, AboutActivity.class);
        startActivity(intent);
    }

    public void onbuttClick(View view) {
        Intent intent = new Intent(MainActivity.this, BirtdayActivity.class);
        startActivity(intent);
я просто не знаю как правильно включить обработчик нажатия.
когда одна кнопка то работает(  public void onClick(View view)) когда вторую добавляю уже не получается.

Пожалуйста напишите как правильно обратиться к кнопке.

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

Покажите код разметки

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

вот кода рзметки

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="com.example.myappactivity.MainActivity">

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="0dp">

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Button
            android:id="@+id/button"
            android:layout_width="129dp"
            android:layout_height="96dp"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="27dp"
            android:layout_marginStart="68dp"
            android:layout_toEndOf="@+id/textView"
            android:onClick="onClick"
            android:text="@string/about_title"
            tools:layout_editor_absoluteX="128dp"
            tools:layout_editor_absoluteY="109dp" />

        <Button
            android:id="@+id/butt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/button"
            android:layout_alignEnd="@+id/button"
            android:layout_alignStart="@+id/button"
            android:layout_marginBottom="143dp"
            android:onClick="onClick"
            android:text="@string/title_activity_birtday" />
    </RelativeLayout>
</android.support.constraint.ConstraintLayout>

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

Вы внимательно читали статью? Вы видите соответствие между кодом в разметке и в классе?

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

Да я эту статью много раз перечитал, и ошибок в коде не вижу.
Я повторюсь когда я добавил одну кнопку и использовал обработчик нажатия
(public void onClick(View view))
то все работает, когда я просто добавляю еще одну кнопку то обе кнопки выполняют одну операцию. но когда я в обработчике пишу ID кнопки (  public void onButtonClick(View view))
то функция onClick перестает работать и пишет что функция onClick нигде не используется.
Вопрос правильно ли я сделал что обращаюсь к кнопке через его ID, если нет то как правильно обратиться?

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

Плохо читаете. Никакого обращения к ID у вас не происходит, вы просто с потолка взяли и придумали название метода. Студия ваших мыслей читать не умеет. Почитайте про кнопки в другом разделе, чтобы разобраться.

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

Все разобрался спасибо.
на уроке про светофор мне было лень все писать и я копировал, вот оно мне боком и вышло.

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

А Александр ведь очень однозначно предупреждал, не один раз: "не копируйте, руками пишите..." Эхх...

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

matveyboyko wrote:

Александр, спасибо за труд и у меня пара вопросов.
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.
Спасибо.

тут есть очень важное замечание для новичков, в виде ключа передается "значение" строки
а значит на выходе .......getString(вот тут) тоже должно быть значение. не важно как его задать статической паблик переменной или просто строкой.
пример будет ясным:

private final String keyHello = "com.example.press.Hello";

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra(keyHello, "привет народ");
startActivity(intent);


String hello = getIntent().getStringExtra("com.example.press.Hello");

TextView textViewForSecond = (TextView)findViewById(R.id.textView_for_second);
textViewForAbout2.setText(hello);

надеюсь понятно объяснил, я сам не моргая пол часа уперся в монитор не понимая почему не работает .....getString("keyHello") думал. что в кавычках надо писать имя переменной которая выступает в качестве ключа ))).

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

Вы не до конца поняли базовые вещи - что такое переменная и что такое строка. Переменная не может быть в кавычках. Полгода практики и ваш вопрос вам самому будет казаться детским.

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

alexander.klimoff wrote:

Вы не до конца поняли базовые вещи - что такое переменная и что такое строка. Переменная не может быть в кавычках. Полгода практики и ваш вопрос вам самому будет казаться детским.

во первых спасибо вам за ваши труды и ЖИВОЙ форум.)))

у меня действительно стаж только пару месяцев) но строка и переменная я вроде знаю что такое))).
я просто не сразу понял(заметил) что в кавычках не переменную надо писать а значение String которое назначали ключом.
а потом стукал себя по голове говоря как ты мог переменную писать в кавычках))).

потом увидел что у matveyboyko wrote та же беда,))

public final static String USER = "com.example.sergey.onsecondactivity.USER";
......................................................................................
String user = getIntent().getExtras().getString("user"); - не надо так.(

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

Подскажите, если не сложно, почему если

TextView infoTextView = (TextView) findViewById(R.id.textViewInfo);

инициализирую в классе MainActivity, а не в методе onActivityResult то приложение даже не запускается? Долго искал причину, почему не работает и хотелось бы понять разницу.


Так вот не работает:
public class MainActivity extends AppCompatActivity {

    TextView thief = (TextView)findViewById(R.id.textViewThief);

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

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

neck20061 wrote:

Подскажите, если не сложно, почему если

TextView infoTextView = (TextView) findViewById(R.id.textViewInfo);

инициализирую в классе MainActivity, а не в методе onActivityResult то приложение даже не запускается?

Потому что это нарушение синтаксиса smile Метод findViewById должен вызываться внутри процедур, а не где попало.

95 (edited by Across 2017-10-10 11:10:45)

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

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

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.nout.step2">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


        <activity android:name=".AboutActivity"
            android:label="@string/about_title">
        </activity>

    </application>



</manifest>

string.xmp

<resources>
    <string name="app_name">Step223</string>

    <string name="about_title">WTF?</string>

    <string name="about_text">
    Какого \n
    Хрена \n
    <u>нет</u> \n
    <b>ШАПКИ!?!?!?!?!</b>
    </string>



</resources>

activiti_about

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
    >

<TextView
    android:id="@+id/textView_about_content"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/about_text"/>

</ScrollView>

Спасибо за ответ.

P.S. Добавляю другие активити, в них тоже шапки нет

P.S.S решил все переделать с нуля и немного полазил в гугле... такое впечатление что Bundle - не работает. Не хочет наследовать ни чего. Я не могу нормально текст форматировать во втором активите и ни чего не передается.

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

Чтобы заголовок label, указанный в манифесте, отображался при запуске второй активности, достаточно унаследовать класс активности не от Activity, а от AppCompatActivity, как указывалось в данной теме ранее. Хорошо бы исправить это в статье.

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

Не вижу связи

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

alexander.klimoff wrote:

Не вижу связи

Насколько я понял, умалчиваемое поведение Activity изменилось, начиная с какой-то версии, поэтому нужно либо  наследоваться от другого класса (например, AppCompatActivity), либо устанавливать выдачу заголовка явно.

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

Не совсем так. Если вы используете класс Activity, то его тоже нужно настроить в манифесте как и AppCompatActivity. Например, так.

        <activity
            android:name=".SecondActivity"
            android:label="Second"
            android:theme="@android:style/Theme.Holo.Light.DarkActionBar"></activity>

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

alexander.klimoff wrote:

Не совсем так. Если вы используете класс Activity, то его тоже нужно настроить в манифесте как и AppCompatActivity. Например, так.

        <activity
            android:name=".SecondActivity"
            android:label="Second"
            android:theme="@android:style/Theme.Holo.Light.DarkActionBar"></activity>

Т.е. у Activity нет умалчиваемой темы?