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

Обсуждение уроков
Lkami
Сообщения: 5
Зарегистрирован: 24 мар 2013, 14:07

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

Сообщение Lkami » 30 мар 2013, 18:00

Clean и заново написанный код в сочетании помогли. Спасибо большое.

Один вопрос, имеем в итоге следующий код:

TextView myTextView = (TextView) findViewById(R.id.myText);
myTextView.setText("New text in TextView");

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

CheckBox myChb = (CheckBox) findViewById(R.id.myChb);
myChb.setChecked(true);

Вопрос: в MainActivity.java после Button пишется myBtn, что соответствует записи @+id/myBtn, аналогично после CheckBox пишем myChb, а вот после TextView пишется myTextView, хотя в поле id пишем @+id/myText. Упрощу вопрос, почему после TextView пишем не myText, а myTextView?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 30 мар 2013, 18:26

улыбнул вопрос =)

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

TextView myTextView = (TextView) findViewById(R.id.myText);
//myTextView - это объект
//myText - id вьюхи
R.id.team
Политика на форуме запрещена

Lkami
Сообщения: 5
Зарегистрирован: 24 мар 2013, 14:07

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

Сообщение Lkami » 01 апр 2013, 06:30

rezak90 писал(а):улыбнул вопрос =)

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

TextView myTextView = (TextView) findViewById(R.id.myText);
//myTextView - это объект
//myText - id вьюхи

Прочитал еще раз урок, нашел следующую фразу:
"Пишем код:
Button myBtn = (Button) findViewById(R.id.myBtn);
Обратите внимание, что у меня совпадает имя объекта и ID"

С предыдущим вопросом разобрался, спасибо, но тут же возник целый ряд других вопросов, вытекающих из фразы "у меня совпадает имя объекта и ID".
1. Т.е. кнопка Button в Eclipse как объект именуется всегда myBtn и какой бы я не присваивал ID кнопке (например ХХХХХ) запись всегда будет "Button myBtn = (Button) findViewById(R.id.ХХХХХ);" ?
2. Если на первый вопрос ответ Да, то где можно в Эклипсе найти список "названий" объектов? (Например, как тогда будет именоваться объект radioButton?)
3. Если на первый вопрос ответ Нет, то когда мы успели обозвать объект Button - myBtn (не имею ввиду ID, с ID всё понятно)
Button myBtn = (Button)?

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

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

Сообщение Foenix » 01 апр 2013, 07:14

1. НЕТ!!
3. можно писать так Button moibutton77777 = (Button) findViewById(R.id.ХХХХХ);
При этом Button - тип, moibutton77777 - желаемое имя переменной данного типа, а (Button) findViewById(R.id.ХХХХХ); - это мы сразу в одном операторе задаем этой переменной начальное значение.
С тем же успехом можно было бы сделать два оператора в разных частях программы:
Button moibutton77777; объявить переменную.
moibutton77777=(Button) findViewById(R.id.ХХХХХ); Присвоить ей значение.
R.id.team

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 01 апр 2013, 07:15

О Господи))) Я предыдущий Ваш комментарий заношу к себе в архив что бы потом поднимать себе настроение хД)
Button - класс
myBtn - объект
R.id.myBtn - айди ресурса
И можно вообще писать что угодно, хоть и так:

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

Button kiss_my_ass_every_day = (Button) findViewById(R.id.myBtn); //придумал ради примера =)
Совет, сначала хотя бы ознакомиться с основами ООП.
Olivka, :x опередила.
R.id.team
Политика на форуме запрещена

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

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

Сообщение Foenix » 01 апр 2013, 07:16

Совпадающие имена переменных с их ID часто задают для того, чтоб не выдумывать новые имена и не путаться что это за кнопка.
R.id.team

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

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

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

Сообщение Foenix » 01 апр 2013, 07:18

rezak90 писал(а): Совет, сначала хотя бы ознакомиться с основами ООП.
Olivka, :x опередила.
лучше с основами программирования с нуля, ООП тут вообще не при делах, а то парень запутается))
Ну ты переменнюу со смыслом назвал))) я, конечно , погорячилась с названием)) - надо давать, конечно же, осмысленные имена переменным))
R.id.team

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 01 апр 2013, 08:41

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

(основы программирование) != (основы ООП) !?!
R.id.team
Политика на форуме запрещена

Lkami
Сообщения: 5
Зарегистрирован: 24 мар 2013, 14:07

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

Сообщение Lkami » 01 апр 2013, 22:09

Вас понял.

erNesto
Сообщения: 4
Зарегистрирован: 18 фев 2013, 20:06

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

Сообщение erNesto » 07 апр 2013, 15:01

всем привет) у меня проблема: не работает setEnabled(false) для кнопки... этот метод вызываю в onCreate формы... у вас такое работает, а у меня - не хочкт, в чём прикол?)

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

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_operation_chooser);
		
		btnView = (Button) findViewById(R.id.btnView);
		btnAdd = (Button) findViewById(R.id.btnAdd);
		btnEdit = (Button) findViewById(R.id.btnEdit);
		btnExit = (Button) findViewById(R.id.btnExit);
		
		Intent intent = getIntent();
	    
		privilege = intent.getStringExtra("privilege");

		if (privilege == "3" || privilege == "2"){
			btnEdit.setEnabled(false);
			if (privilege == "3"){
				btnAdd.setEnabled(false);
			}
		}
		
		btnView.setOnClickListener(this);
		btnAdd.setOnClickListener(this);
		btnEdit.setOnClickListener(this);
		btnExit.setOnClickListener(this);
			
	}
суть кода: после авторизации, из БД тянется инфа о пользователе... есть три типа пользователя: админ (1), "что то среднее" (2) и пользователь(3)... для среднего нужно запретить изминение и удаление записей из БД (btnEdit), для юзера - и удаление, и добавление новых записей (btnAdd)...

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 07 апр 2013, 15:37

кто ж так строки сравнивает :o ... просто условие в if не заходит
R.id.team
Политика на форуме запрещена

erNesto
Сообщения: 4
Зарегистрирован: 18 фев 2013, 20:06

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

Сообщение erNesto » 07 апр 2013, 15:44

rezak90 писал(а):кто ж так строки сравнивает :o ... просто условие в if не заходит
ух ёёё :lol: =))) туплю жестко) у меня просто в начале тип privilege был byte, поменял на строку, что то не подумал))) спасибо)

koffe
Сообщения: 5
Зарегистрирован: 16 май 2013, 21:12

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

Сообщение koffe » 16 май 2013, 22:14

1) Что обозначает каждая строчка? Я не могу разобраться в этом начальном MainActivity...

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

package ru.startandroid.develop.example;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

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

	@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, а в актуальной версии Эклипса создается два @Override. Видимо гугл развивается и всё меняется со временем. Вот я и хочу узнать что обозначает каждый @Override и как применять старый код в новом Эклипсе. И вообще. Что такое @Override? Сколько перерыл - нет нормального объяснения, как, например, в 25 уроке автор объясняет что такое Task на примере браузера.

2) Тот же самый вопрос вставки старого кода и про Layout-файл.
Вот код из урока 6:

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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 	android:layout_width="match_parent"
 	android:layout_height="match_parent">
	<TextView
 		android:id="@+id/label"
		 android:layout_width="match_parent"
 		android:layout_height="wrap_content"
 		android:text="Type here:">
	</TextView>
	<EditText
		 android:id="@+id/entry"
 		android:layout_width="match_parent"
 		android:layout_height="wrap_content"
 		android:layout_below="@+id/label"
 		android:background="@android:drawable/editbox_background">
	</EditText>
	<Button
 			android:id="@+id/ok"
		 android:layout_width="wrap_content"
 		android:layout_height="wrap_content"
 		android:layout_alignParentRight="true"
 		android:layout_below="@+id/entry"
 		android:layout_marginLeft="10dip"
 		android:text="OK">
	</Button>
	<Button
		 android:layout_width="wrap_content"
		 android:layout_height="wrap_content"
 		android:layout_alignTop="@+id/ok"
 		android:layout_toLeftOf="@+id/ok"
		 android:text="Cancel">
	</Button>
</RelativeLayout>
Когда я создаю проект и вставляю код, то вылазит куча ошибок. Вот код нового созданного проекта:

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

<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=".MainActivity" >

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

</RelativeLayout>
Если присмотреться, то видно, что начало кода разное. А как тогда грамотно вставить код из старого Эклипса?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 16 май 2013, 22:34

@Override - это аннотация компилятору что переопределяется метод базового класса, якобы что бы компилятор потом не налажал где то (читал что были случаи), вот такое объяснение я находил на stackoverflow.
Когда я создаю проект и вставляю код, то вылазит куча ошибок.
какие ошибки? но думаю всё виной
вставляю код
R.id.team
Политика на форуме запрещена

koffe
Сообщения: 5
Зарегистрирован: 16 май 2013, 21:12

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

Сообщение koffe » 18 май 2013, 18:29

rezak90 писал(а):какие ошибки? но думаю всё виной
вставляю код
А как надо?

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

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

Сообщение Foenix » 18 май 2013, 21:27

koffe писал(а):
rezak90 писал(а):какие ошибки? но думаю всё виной
вставляю код
А как надо?
понимать что пишешь нужно.. когда вставляешь кажется, что должно работать, Но вначале нужно разобраться..
R.id.team

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 19 май 2013, 05:10

koffe писал(а):
rezak90 писал(а):какие ошибки? но думаю всё виной
вставляю код
А как надо?
писать, а копи-паст ни к чему хорошему не приводит.
R.id.team
Политика на форуме запрещена

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 21 май 2013, 13:07

на счёт @Override нашёл на Java оф объяснение:
@Override: The @Override annotation must be used whenever a method overrides the declaration or implementation from a super-class.
For example, if you use the @inheritdocs Javadoc tag, and derive from a class (not an interface), you must also annotate that the method @Overrides the parent class's method.
R.id.team
Политика на форуме запрещена

koffe
Сообщения: 5
Зарегистрирован: 16 май 2013, 21:12

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

Сообщение koffe » 21 май 2013, 13:27

не дружу с английским(((((((((

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 21 май 2013, 13:40

koffe писал(а):не дружу с английским(((((((((
translate.google.ru
R.id.team
Политика на форуме запрещена

Ответить