Урок 8. Работаем с элементами экрана из кода

Обсуждение уроков
Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение Isaev » 09 окт 2013, 13:46

где + означает, что это новый ресурс и он должен добавиться в R.java класс, если он там еще не существует.
Теперь откроем R.java и видим, что для класса id появилась константа myText. Т.е. чтобы к ней обратиться, надо написать R.id.myText.
А что делать, если файл R.java не меняется НИКОГДА?
Он у меня всегда имеет один вид:

Код: Выделить всё

/*___Generated_by_IDEA___*/

package ru.example.ViewById;

/* This stub is for using by IDE only. It is NOT the R class actually packed into APK */
public final class R {
}
и ничто новое в него само не прописывается, хотя вроде всё работает

Вынес в отдельную тему, если кто знает решение, отпишитесь там: viewtopic.php?f=45&t=2675
Последний раз редактировалось Isaev 10 окт 2013, 11:43, всего редактировалось 1 раз.

snowkam
Сообщения: 162
Зарегистрирован: 21 мар 2013, 11:22

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение snowkam » 09 окт 2013, 14:45

ImageButton установить картинку setImageResource(). А как вытащить из этой кнопки картинку????

Trimbombom
Сообщения: 20
Зарегистрирован: 20 окт 2013, 23:53
Контактная информация:

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение Trimbombom » 28 окт 2013, 00:19

А можно сделать все то же самое, как в уроке, но не через код, а через кнопки? Или каждый раз так код вручную писать?

SPAWN
Сообщения: 20
Зарегистрирован: 11 мар 2013, 21:59

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение SPAWN » 04 ноя 2013, 12:31

Всем привет. Хоть немного не в тему. Подскажите, как на SeekBar сделать так что бы прогресс можно было изменять только потянув за thumb, а не по всему Seekbar?

Trimbombom
Сообщения: 20
Зарегистрирован: 20 окт 2013, 23:53
Контактная информация:

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение Trimbombom » 12 ноя 2013, 01:23

Фрагмент кода:

Button MyBtn = (Button) findViewById(R.id.myBtn);
myBtn.setText("My button");
myBtn.setEnabled (false);

На строку Button MyBtn = (Button) findViewById(R.id.myBtn); программа ругается и пишет

"The value of the local variable MyBtn is not used" - что это значит?

На строку myBtn.setText("My button"); пишет: Line breakpoint:MainActivity [line: 19] - onCreate(Bundle) - на знаю, хорошо это или плохо и что с этим делать...

Сохраняю, запускаю - однако кнопка Button по-прежнему активна...

В чем может быть причина?

Заранее СПС.

P.S. В aktivity_main.xml в строке
android:text="My Button" /> всплывает подсказка:
[I18N] Hardcoded string "My Button", should use @string resource

Как добавить этот @string resource и куда...
=============

Проблема решилась - просто в фрагменте кода в строке
Button MyBtn = (Button) findViewById(R.id.myBtn); была ошибка, а именно MyBtn была написана с большой М, а надо с маленькой, т.е. myBtn...

Аватара пользователя
Foenix
Сообщения: 4200
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение Foenix » 12 ноя 2013, 08:35

should use @string resource.........
самый простой способ, нажми на этой строчке ctrl+1 (и вообще почаще этим сочетанием пользуйся, это быстрее, чем на форуме спросить), там будет что-то типа add string ... строчка автоматом создастся в ресурсах..

breakpoint - это точка останова, нужна для отладки.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

TittTitov
Сообщения: 27
Зарегистрирован: 20 ноя 2013, 22:46

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение TittTitov » 24 ноя 2013, 14:50

Никак не получается открыть проект в эмуляторе.
До этого урока получалось открывать. Подумал, что может быть что-то неверно записал в ходе урока. Создал простой проект - "Хэлоу ворлд" как в первом уроке - всё равно не запускается. Переустанавливал эклипс - та же шляпа! Как это можно исправить? Спасибо!
Ошибка при запуске эмулятора
Ошибка при запуске эмулятора
ошибка.PNG (22.31 КБ) 6879 просмотров
Сообщения в консоли
Сообщения в консоли
консоль.PNG (38.72 КБ) 6879 просмотров

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение trew » 24 ноя 2013, 15:02

TittTitov писал(а):Никак не получается открыть проект в эмуляторе.
До этого урока получалось открывать. Подумал, что может быть что-то неверно записал в ходе урока. Создал простой проект - "Хэлоу ворлд" как в первом уроке - всё равно не запускается. Переустанавливал эклипс - та же шляпа! Как это можно исправить? Спасибо!
ошибка.PNG
консоль.PNG
ссылка
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

UraP
Сообщения: 4
Зарегистрирован: 25 ноя 2013, 20:53

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение UraP » 26 ноя 2013, 00:22

Создал такой код, и возник вопрос - Существует ли какая-нибудь команда, чтобы изменить текст во всех TextView сразу же, а не описывать по-отдельности каждый Textview?? Например я хочу везде ввести 12345.....
Вложения
123.png
123.png (19.03 КБ) 6860 просмотров

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение trew » 26 ноя 2013, 10:12

UraP писал(а):Создал такой код, и возник вопрос - Существует ли какая-нибудь команда, чтобы изменить текст во всех TextView сразу же, а не описывать по-отдельности каждый Textview?? Например я хочу везде ввести 12345.....
Да, существует.
Для этого вам нужно создать метод, в который передавать текстовое значение 12345...
А внутри метода перечислить TextView и присваивать это значение.

(код выкладывайте на форму в виде текста, прочтите мою подпись)
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

mike-120
Сообщения: 5
Зарегистрирован: 10 дек 2013, 16:42

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение mike-120 » 10 дек 2013, 16:57

Доброго всем времени суток! У меня вопрос по уроку. Прописывая. в main.xml в TextView нижнюю строчку android:id="@+id/myText",при этом должна появиться константа в R.java в public static final class id. У меня она не появляется. Не пойму... Подскажите,уже полчаса голову ломаю.

mike-120
Сообщения: 5
Зарегистрирован: 10 дек 2013, 16:42

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение mike-120 » 10 дек 2013, 17:15

mike-120 писал(а):Доброго всем времени суток! У меня вопрос по уроку. Прописывая. в main.xml в TextView нижнюю строчку android:id="@+id/myText",при этом должна появиться константа в R.java в public static final class id. У меня она не появляется. Не пойму... Подскажите,уже полчаса голову ломаю.
Разобрался. Нужно сохранять.

Аватара пользователя
donbenderantonio
Сообщения: 2
Зарегистрирован: 24 мар 2014, 12:19

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение donbenderantonio » 24 мар 2014, 13:27

Здравствуйте. Недавно начал изучать Android и столкнулся с такой проблемой, т.к. структура проекта значительно изменилась в виду обновлений(теперь проект по умолчанию создается с fragment, выполнение уроков с канала startandroid стало затруднительным.
К примеру никак не могу выполнить этот урок, хотя вроде как все делаю по инструкции и в эклипсе не выдает никаких ошибок пока не запускаю проект, а при запуске происходит ошибка.
Проект создаю по умолчанию,
activity_main имеет следующий вид:

Код: Выделить всё

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.p006.MainActivity"
    tools:ignore="MergeRootFrame" />

fragment_main имеет следующи вид

Код: Выделить всё

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.p006.MainActivity$PlaceholderFragment" >

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

</RelativeLayout>
MainActivity имеет следующий вид:

Код: Выделить всё

package com.example.p006;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		TextView myTextView = (TextView) findViewById(R.id.myText);
		myTextView.setText("text");
		
		if (savedInstanceState == null) {
			getSupportFragmentManager().beginTransaction()
					.add(R.id.container, new PlaceholderFragment()).commit();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {

		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}

	/**
	 * A placeholder fragment containing a simple view.
	 */
	public static class PlaceholderFragment extends Fragment {

		public PlaceholderFragment() {
		}

		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container,
				Bundle savedInstanceState) {
			View rootView = inflater.inflate(R.layout.fragment_main, container,
					false);
			return rootView;
		}
	}

}
при запуске приложения выдает следующий log c ошибками:

Код: Выделить всё

03-24 10:22:33.864: D/AndroidRuntime(414): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
03-24 10:22:33.864: D/AndroidRuntime(414): CheckJNI is ON
03-24 10:22:34.334: D/AndroidRuntime(414): Calling main entry com.android.commands.pm.Pm
03-24 10:22:34.354: D/AndroidRuntime(414): Shutting down VM
03-24 10:22:34.364: D/dalvikvm(414): GC_CONCURRENT freed 101K, 71% free 297K/1024K, external 0K/0K, paused 1ms+1ms
03-24 10:22:34.374: D/dalvikvm(414): Debugger has detached; object registry had 1 entries
03-24 10:22:34.394: I/AndroidRuntime(414): NOTE: attach of thread 'Binder Thread #3' failed
03-24 10:22:34.685: D/AndroidRuntime(424): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
03-24 10:22:34.685: D/AndroidRuntime(424): CheckJNI is ON
03-24 10:22:35.144: D/AndroidRuntime(424): Calling main entry com.android.commands.am.Am
03-24 10:22:35.174: I/ActivityManager(75): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.p006/.MainActivity } from pid 424
03-24 10:22:35.204: I/ActivityManager(75): Start proc com.example.p006 for activity com.example.p006/.MainActivity: pid=432 uid=10034 gids={}
03-24 10:22:35.235: D/AndroidRuntime(424): Shutting down VM
03-24 10:22:35.245: D/dalvikvm(424): GC_CONCURRENT freed 102K, 69% free 319K/1024K, external 0K/0K, paused 1ms+1ms
03-24 10:22:35.245: D/dalvikvm(424): Debugger has detached; object registry had 1 entries
03-24 10:22:36.175: D/AndroidRuntime(432): Shutting down VM
03-24 10:22:36.175: W/dalvikvm(432): threadid=1: thread exiting with uncaught exception (group=0x40015560)
03-24 10:22:36.184: E/AndroidRuntime(432): FATAL EXCEPTION: main
03-24 10:22:36.184: E/AndroidRuntime(432): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.p006/com.example.p006.MainActivity}: java.lang.NullPointerException
03-24 10:22:36.184: E/AndroidRuntime(432): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
03-24 10:22:36.184: E/AndroidRuntime(432): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-24 10:22:36.184: E/AndroidRuntime(432): 	at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-24 10:22:36.184: E/AndroidRuntime(432): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-24 10:22:36.184: E/AndroidRuntime(432): 	at android.os.Handler.dispatchMessage(Handler.java:99)
03-24 10:22:36.184: E/AndroidRuntime(432): 	at android.os.Looper.loop(Looper.java:123)
03-24 10:22:36.184: E/AndroidRuntime(432): 	at android.app.ActivityThread.main(ActivityThread.java:3683)
03-24 10:22:36.184: E/AndroidRuntime(432): 	at java.lang.reflect.Method.invokeNative(Native Method)
03-24 10:22:36.184: E/AndroidRuntime(432): 	at java.lang.reflect.Method.invoke(Method.java:507)
03-24 10:22:36.184: E/AndroidRuntime(432): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-24 10:22:36.184: E/AndroidRuntime(432): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-24 10:22:36.184: E/AndroidRuntime(432): 	at dalvik.system.NativeStart.main(Native Method)
03-24 10:22:36.184: E/AndroidRuntime(432): Caused by: java.lang.NullPointerException
03-24 10:22:36.184: E/AndroidRuntime(432): 	at com.example.p006.MainActivity.onCreate(MainActivity.java:20)
03-24 10:22:36.184: E/AndroidRuntime(432): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-24 10:22:36.184: E/AndroidRuntime(432): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
03-24 10:22:36.184: E/AndroidRuntime(432): 	... 11 more
03-24 10:22:36.195: W/ActivityManager(75):   Force finishing activity com.example.p006/.MainActivity
03-24 10:22:36.715: W/ActivityManager(75): Activity pause timeout for HistoryRecord{408eaeb8 com.example.p006/.MainActivity}
03-24 10:22:37.125: I/dalvikvm(75): Jit: resizing JitTable from 1024 to 2048
03-24 10:22:47.155: W/ActivityManager(75): Activity destroy timeout for HistoryRecord{408eaeb8 com.example.p006/.MainActivity}
03-24 10:23:14.337: D/SntpClient(75): request time failed: java.net.SocketException: Address family not supported by protocol
Уже второй день не могу разобраться в чем проблема, помогите пожалуйста.
И подскажите имеется ли какой либо мануал как выполнять первые уроки с учетом обновленной структуры проекта, сам не нашел =(

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение klblk » 24 мар 2014, 14:39

Ну не там вы ищете свой TextView. Он находится во фрагменте, а ищите вы его в активити. Как-то так нужно:
[syntax=java]@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
TextView myTextView = (TextView) rootView.findViewById(R.id.myText);
myTextView.setText("text");
return rootView;
} [/syntax]

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

Аватара пользователя
donbenderantonio
Сообщения: 2
Зарегистрирован: 24 мар 2014, 12:19

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение donbenderantonio » 24 мар 2014, 15:07

Уффф) спасибо огромное получилось, а ведь столько бился ...
klblk писал(а):Ну не там вы ищете свой TextView. Он находится во фрагменте, а ищите вы его в активити. Как-то так нужно:
rootView.findViewById(R.id.myText);
Я до этого догадался и пробовал так сделать, только вот не подставлял rootView.
это что такое, такое перед каждым методом подставлять надо, когда к нему во фрагменте обращаешься...? об этом есть в уроках про фрагменты?
Вырезать фрагменты считаю не правильно, раз они теперь по умолчанию надо сразу так и учиться с ними работать.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение klblk » 25 мар 2014, 05:44

rootView это главное view для фрагмента, которое строится в данной функции. В нем и нужно искать элементы (findViewById), которые мы записали во fragment_main.
Чтобы получить доступ к данной view из других методов фрагмента можно использовать метод getView() (например: getView().findViewById(R.id.myText)), но только в тех методах, которые вызываются уже после onCreateView (опять же смотри лайфцикл).

АЛЬБЕК
Сообщения: 8
Зарегистрирован: 20 мар 2014, 21:19

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение АЛЬБЕК » 25 мар 2014, 21:26

Добрый вечер!
На 8 уроке непонятка...

АЛЬБЕК
Сообщения: 8
Зарегистрирован: 20 мар 2014, 21:19

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение АЛЬБЕК » 25 мар 2014, 21:35

Разница на уроке и у меня
Вложения
Вот так выглядит R.java у меня
Вот так выглядит R.java у меня
b.JPG (158.68 КБ) 6713 просмотров
Вот так выглядит R.java на уроке
Вот так выглядит R.java на уроке
a.JPG (138.16 КБ) 6713 просмотров

siberprogs
Сообщения: 93
Зарегистрирован: 05 мар 2014, 06:20

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение siberprogs » 26 мар 2014, 06:49

АЛЬБЕК писал(а):Разница на уроке и у меня
Уроки написаны на старом SDK когда не использовались ни action bar ни frame layout.
Linux Fedora RFRemix + Intellij Idea

Аватара пользователя
xamak
Сообщения: 15
Зарегистрирован: 14 апр 2014, 03:05

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение xamak » 14 апр 2014, 03:39

Здравствуйте. Подскажите, пожалуйста, а зачем добавлять к ID "View" ?

Код: Выделить всё

TextView myTextView = (TextView) findViewById(R.id.myText);
myTextView.setText("New text in TextView");
В дальнейших уроках подобное не наблюдается. К тому же, если удалить "View", тогда код все равно срабатывает.

Код: Выделить всё

TextView myText = (TextView) findViewById(R.id.myText);
myText.setText("New text in TextView");
:) Сам догадался пока набирал сообщение. Но все же поправьте, если ошибаюсь.
Выходит "myTextView" - это произвольное имя? То-есть этому элементу с ID "myText" присваиваем название, например, "myTextView" и далее к нему обращаемся по этому имени, например, myTextView.setText?

Еще один вопрос есть (Урок 9), почему за пределы "onCreate" выносится "TextView tvOut;"? Ну, я прочитал, что это делается для того, чтобы можно было из любого метода обращаться, но ведь за пределы мы выносим свое произвольное имя, которое с ID ничего не имеет общего. Логичнее было бы вывести на это место TextView tvOut = (TextView) findViewById(R.id.tvOut); где сказано о том, что "tvOut" - это объект с ID "tvOut", а дальше мы б к этому объекту со всех мест обращались просто tvOut.setText("New text in TextView");. Я понял, что так сделать нельзя (приложение не запускается) хоть программа и не ругается, просто интересно и пытаюсь понять логику.

Благодарю! Прикрепляю картинку. Вот... получилось бы красиво, логично и меньше лишнего текста :)
Вложения
mb.png
mb.png (12.43 КБ) 6652 просмотра

Ответить