Pull to refresh

Comments 55

>>«Здравствуй, друг»
Пофиксите :)

Автору спасибо! Недавно тоже пытался попробовать андроид после WP7, привязка обработчиков просто убила. Решал это копипастой :)
я тоже сначала использовал копипаст ))
Не понял, что пофиксить — вроде все правильно

Решаю это при помощи Eclipse и Ctrl-Space — Enter — Enter
а подробнее? где и когда это нажимать?
Набираем (используя автокомплит), нажимаем Ctrl-Space:

image

Нажимаем Enter:

image
>обработка щелчка кнопки
>>мне она стоила одной ночи.

Шокировало секунд на 10 :)

Еще есть простой вариант — для вашего класса Activity можно указать, что он реализует интерфейс OnClickListener, тогда в одном методе onClick можно обрабатывать все ваши кнопки :)
То есть у вас будет метод onClick(), в котором будет один большой switch на все кнопки (по их id) :)
ну это я так образно сказал.
про указанный способ спасибо — наверное, в некоторых проектах понадобится такой подход.
теперь могу написать совет, который давали мне
подсветите пожалуйста код
<!--Ваш код-->

тут кода не так много. стоит ли?
ваша правда… хотя тут дело вкуса
пожалуй, правда ваша )). Так будет лучше. поправил
извиняюсь, используя source lang = «java»

Два месяца назад я написал статью, таргетированную на новичков в разработке под Андроид (да и на java), на примере разработки игры «крестики-нолики» где очень подробно описал каждый этап (с большим количеством листингов и скринов + видео готового приложения). Я ее запостил в песочницу и добрый человек blo.habrahabr.ru выдал мне инвайт, но я побоялся опубликовывать ее здесь, так как к тому времени появилось оочень много квик-стартов на русском (на хабре в том числе).
а где теперь можно почитать вашу статью? и чего вы боитесь? поделитесь, плиз
вот хочу понять насколько тема актуальна
выкладывайте. и вам плюсы и нам интересно :)
а как вы узнаете, если не выкладываете?
А где мораль? Не надо бояться?
Правильная мысль в статье. Материалов и правда мало на русском. Официальные гайдлайны это очень правильно и хорошо, но для тех кто начинает освоение новой платформы удобнее начинать с родного языка, а дальше и за документацтю можно взяться.
согласен. меня это немного удивило, что такая популярная платформа и так мало материала на русском для начинающих. если сравнить с microsoft — небо и земля. хочу поучаствовать в закрытии белых дыр.
С удовольствием бы читал ваши статьи.
Хелло ворлды на русском есть, плюс на хабре некоторое количество статей про разработку программ чуть повышенной сложности, что еще нужно? Дальше вы пишите свои программы, сталкиваясь с чем-нибудь неизвестным гуглите и находите ответ на каком-нибудь stackoverflow.com или его тоже надо перевести?
вы не представляете, как много людей, не имеющих опыта программирования, не могут пройти дальше первого Hello, World. И статьи повышенной сложности не для них. И чтобы писать свои программы, нужно получить некоторую основу, от которой можно отталкиваться.
Я говорю о статьях, которые имеют уровень следующий после Hello, World. Только читая статьи не уйдешь далеко, надо себе ставить несложную задачу и решать ее.
Чем-то это напоминает «Android для блондинок». Если человек не может продвинуться дальше «Hello, World», может быть проблема всё-таки не в примерах, а в человеке? Страшно представить, как такие люди будут с multithreading разбираться :(

Доступность Android SDK ещё не означает, что секретарша с гуманитарным образованием должна начать начать разрабатывать свои приложения…
вы меня извините, но позвольте блондинке не интересоваться вашим мнением, что ей надо делать.
С таким успехом можно сказать и про вас — лучше стояли бы у фрезерного станка и выпускали нужную продукцию, а не сидели бы в интернетах.
Мне это напоминает идеологию гитлера.
Поставил минус, так как если человек не может продвинуться Hello World, то начинать ему необходимо с основ программирования.
Причём это не значит, что ему закрыт путь в разработку, а лишь то, что сначала нужно получить базу, которая в дальнейшем позволит изучать новые фреймворки. И как раз невозможность шагнуть за пределы Hello world должна служить для такого человека знаком, что ему, явно, не хватает каких-то базовых знаний.

И да, английский язык — это стандарт дефакто для документации. И просто немыслимо рассчитывать заниматься разработкой и быть не в состоянии прочитать и понять документацию на английском — это тоже нужно осознавать, и потому целенаправленно улучшать знание языка.
простите, а вы читать умеете? я писал не о себе, а новичках, которым я хочу помочь. основы программирования вы изучили, а русский язык, похоже, нет. я так расстроился из-за вашего минуса, что теперь вторую ночь спать не буду
С чего вы взяли, что я писал что-то про вас? :) С русским языком у меня проблем нет, поверьте :)
Я лишь хотел сказать, что если человек «не имеет опыта программирования» вообще, то ему совсем про другие вещи читать надо, и Андроид, явно, не лучшая точка для старта.

PS:
Про минус написал просто, чтобы показать, что коммент был объяснением, за что минус.
а меня всегда удивляла позиция человека, который советует другим, чем им нужно заниматься. если человеку очень хочется заняться андроидом, но у него нет никакого опыта, то это не повод говорить человеку, что ему нужно заняться другим делом, например, стоять у плиты )). Такое впечатление, что к вам в карман залезают и вы боитесь, что у вас появится новый конкурент (я не вас лично имею в виду, если что)
Ну, это тоже легко объяснимо, и дело тут не в конкуренции. Низкий порог вхождения в какую-либо область (платформу, язык и т.д.) приводит к тому, что появляется множество низкокачественного софта. И из-за этого у конечных пользователей складывается негативное впечатление от платформы вцелом.
Так что указывать, кому что делать, конечно, не стоит, но и искусственно занижать этот самый порог тоже не нужно — он является, своего рода, естественным отбором :) И, кстати, ещё раз — советы были не о том, что делать или нет, а том, с чего начинать.

ЗЫ:
При этом относительно самого поста полностью согласен — странно, что это не указано явно в самом девгайде. Но это есть в примерах, и про это есть отдельная заметка (на вкладке Resources, кстати, вообще много полезных заметок): developer.android.com/resources/articles/ui-1.6.html
Простите, но когда «примеры» даются методом
«А чтобы заработала фича Fitcha1, нужно добавить код код_код_код » и при этом не уточняется куда этод код должен добавляться (и манера подачи материала далеко не всегда делает это очевидным, ну не писатели программисты),
и полные листинги тоже не даются, то не всегда удаётся вьехать сразу, да и не сразу не всегда.
И это при том, что я с программированием, пусть и не на яве, знаком в достаточной степени, чтобы _понимать_ что делает код, а не только копипастить.
>Доступность Android SDK ещё не означает, что секретарша с гуманитарным образованием должна начать начать разрабатывать свои приложения…

И я бы ещё понял, если бы проблемы с хелловорлдом возникли у секретарши, но когда девелопер со стажем не может разобраться с новым SDK — вот это-то для меня очень странно.
Мне за последние полтора года уже дважды приходилось с места в карьер врубаться в новый язык/SDK/платформу (мобильную), которых я до этого в глаза не видел. И в ближайшее время, возможно, ожидается ещё от двух до четырёх (смотря как попрёт), и проблем как-то совершенно не предвижу.
это ограничивает минимально возможную версию ОС, которая сможет выполнять такие программы. 1.6, кажется, не сможет
1.6, к счастью, актуальна лишь для редких китайских телефонов и прочих фоторамках, так что, думаю, много не потеряете.

За хинт спасибо автору, действительно, классная фишка, я даже не задумывался о таком использовании, которое не загромождает основной код.

По поводу мануалов и примеров: настоятельно советую слить исходный код системы, там все стандартные приложения, библиотеки и прочее — идеальный вариант в качестве примера!
А ещё хочется предупредить, что после edtext = (EditText)findViewById(R.id.editText1); edtext может быть null, если что-то не так с файлами интерфейса. Я для себя взял за правило, и рискну вам посоветовать писать в таком стиле:
public void butHello_Click(View v){
    EditText edtext = (EditText) findViewById(R.id.editText1);
    if(edtext!=null) {
        edtext.setText("Здравствуй, друг");
    }
}
В принципе согласен. но для учебного примера, где рассказывается о щелчке, это не главное. но за совет спасибо
как-раз для учебного — это важно!
Привязка обработчика через разметку — это очень удобно и здорово, но этот подход несет в себе потенциальную опасность при использовании ProGuard. Дело в том, что обработчики в этом случае удаляются напрочь как неиспользуемые публичные методы, что приводит к исключениям времени выполнения. Чтобы избежать данной ситуации необходимо прописать дополнительные правила обработки в файле proguard.cfg
а это где нибудь описано у Google? хочется знать все минусы этого способа
developer.android.com/guide/developing/tools/proguard.html

The default proguard.cfg file tries to cover general cases, but you might encounter exceptions such as ClassNotFoundException, which happens when ProGuard strips away an entire class that your application calls

Вольный перевод: "Изначальный proguard.cfg пытается покрыть все общие случаи, но все же вы можете поймать исключение вида ClassNotFoundException, обусловленное тем, что ProGuard удалил класс, который вы используете".

Удаляется все, что используется неявно, через отражение. В эту категорию попадают и привязки через разметку. Более того, так как сами Activity никем не используются, но при этом являются публичными, файл proguard.cfg, генерируемый средой, уже содержит правила-исключения для них.
я имел немного другое — есть ли упоминание, что мой способ не является рекомендованным для общего применения. хочется знать, нужно ли отказаться от него совсем или это дело вкуса
Этот способ специально с 1.6 и ввели, чтобы не плодить тонну поддерживающего кода. Я только лишь обратил внимание на подводные камни, с которыми столкнулся однажды. Очень неприятно, когда секунду назад работающий код начинает вылетать в неожиданных местах после релизного экспорта.
При использовании тега onClick прямо из XML, для вызова указанного метода будет использоваться рефлексия, а не прямые вызовы. Чуть медленней.

Если вы подобную кнопку добавите к диалогу, а обрабатчик напишите в активити, которая вызывает диалог — будет ошибка поиска метода в контексте. Здесь нужно использовать LayoutInflater непосредственно активити.
View v = LayoutInflater.from(parent_activity).inflate(R.layout.dialog, null);
super.setContentView(v);

Но могут возникнуть проблемы с размерами диалога.

а насколько медленнее. насколько критично?
на щелчке не думаю, что будет сколь нибудь заметно. Не критично.
Тоже столкнулся с проблемой отсутствия статей поначалу
На помощь пришли как ни странно книги, хоть и на английском языке, — зато последовательно и основательно
После первой книги (3 дня заняло прочтение, не одна, конечно, ночь) — но в этой среде я уже чувствовал себя свободно, и listenerы ни в каком виде меня не пугали (это вообще стандартный подход в java, странно, что вас это зацепило)
меня не зацепило. я понимаю, что в java это стандартно. просто я больше времени проводил в WP7 и когда встретил знакомый синтаксис, то обрадовался. и мне он привычнее.
Вообще, в вашем изначальном варианте (с привязкой обработчика непосредственно в коде, а не в XML) можно сэкономить на создании ненужной ссылки на обработчик (если, конечно, обработчик обрабатывает только одну кнопку):

protected void onCreate(Bundle savedValues) {
    ...
    // Capture our button from layout
    Button button = (Button)findViewById(R.id.corky);
    // Register the onClick listener
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // do something when the button is clicked
        }
    });
    ...
}
Данный способ не будет работать в фрагментах
Sign up to leave a comment.

Articles