И так, мы уже знаем что такое Activity, Service, Broadcast Receiver и Content Provider, так же мы знаем как установить Eclipse и Android SDK, и можем подключить телефон для отладки. Теперь пришло время для Hello World! :)
Запускаем Eclipse, создаём Android Project:
Запускаем Eclipse, создаём Android Project:
вводим имя проекта, приложения, пакета, Activity
Слева видим файлы нашего проекта:
В папке assets - пусто, в ней можно хранить различные ресурсы, которые нельзя положить в res (например шрифты).
res - хранит ресурсы: картинки (разного разрешения), layout (разметка) для Activity (GUI), layout-land размета для ландшафтной ориентации, значения и ещё много чего.
В bin лежат скомпилированные файлы нашего проекта (*.dex и *.apk).
gen хранит файл R.java, в нём содержаться ссылки на наши ресурсы. Изменять этот файл не стоит.
В src - сырцы :)
В корне проекта нам интересен файл AndroidManifest.xml. В этом файле находится список всех Activity, Broadcast Receiver, Content Provider и Service. Так же настраиваются разрешения (например, использование вибрации или интернета приложением).
Если сейчас заглянуть в манифест, то мы увидим, что у нас есть одно activity:
Запустили? Теперь немного усложним задачу. Сделаем приложение из двух Activity. На одном из них будет кнопка открывающая 2-ое Activity.
Добавим в main.xml кнопку:
В res->layout создадим файл Second.xml:
В src-> my->hello добавим class Second унаследованный от Activity:
package my.hello;
import android.app.Activity;
import android.os.Bundle;
public class Second extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
}
}
Этот файл содержит основной функционал (бизнес логику) Activity. Можно переопределить стандартные функции для Activity, например, onCreate, onDestroy, onResume, onPause. В нашем случае мы переопределили onCreate. Метод setContentView(R.layout.second); задаёт разметку для activity.
Теперь добавим обработчик нажатия кнопки для первого Activity:
public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button myButton = (Button)findViewById(R.id.myButton); // получаем кнопку
myButton.setOnClickListener(myButtonListener); // устанавливаем обработчик
}
OnClickListener myButtonListener = new OnClickListener(){ // обработчик
@Override
public void onClick(View v) { // на нажатие
Intent intent = new Intent(getBaseContext(),Second.class); //создаём намерение, указываем 2-ое Activity
startActivity(intent); // запускаем 2-ое Activity
}
};
}
Добавляем 2-ое Activity в AndroidManifest.xml:
Если сейчас заглянуть в манифест, то мы увидим, что у нас есть одно activity:
Это Activity задано как "стартовое":
Теперь посмотрим на файл main.xml в res->layouts. Это разметка интерфейса. На вкладке layout мы увидим как это будет выглядеть на экране телефона, для редактирования удобнее вкладка *.xml. Сейчас там содержится один TextView, который отображает текст из res->values->strings.xml (Hello World, Main!). Уже сейчас можно подключить телефон к компьютеру и запустить на нём ваше первое приложение для Android :)
Запустили? Теперь немного усложним задачу. Сделаем приложение из двух Activity. На одном из них будет кнопка открывающая 2-ое Activity.
Добавим в main.xml кнопку:
В res->layout создадим файл Second.xml:
В src-> my->hello добавим class Second унаследованный от Activity:
package my.hello;
import android.app.Activity;
import android.os.Bundle;
public class Second extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
}
}
Этот файл содержит основной функционал (бизнес логику) Activity. Можно переопределить стандартные функции для Activity, например, onCreate, onDestroy, onResume, onPause. В нашем случае мы переопределили onCreate. Метод setContentView(R.layout.second); задаёт разметку для activity.
Теперь добавим обработчик нажатия кнопки для первого Activity:
public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button myButton = (Button)findViewById(R.id.myButton); // получаем кнопку
myButton.setOnClickListener(myButtonListener); // устанавливаем обработчик
}
OnClickListener myButtonListener = new OnClickListener(){ // обработчик
@Override
public void onClick(View v) { // на нажатие
Intent intent = new Intent(getBaseContext(),Second.class); //создаём намерение, указываем 2-ое Activity
startActivity(intent); // запускаем 2-ое Activity
}
};
}
Добавляем 2-ое Activity в AndroidManifest.xml:
Компилируем ваше 2-ое приложение для Android :). Если что-то не получается, спрашивайте.
Когда назначаю кнопке ловлю событий .setOnClickListener
ОтветитьУдалитьругается на то что тип myButtonListener не соответствует!
мол надо android.view.View.OnClickListener
вместо OnClickListener
что-то у вас "мутно" написано :) Не совсем понятно. У вас не известен обработчик OnClickListener?
ОтветитьУдалитьView в import есть?
Пишу так:
ОтветитьУдалитьButton myButton = (Button) findViewById(R.id.myButton);
myButton.setOnClickListener(myButtonListener);
И мне выдает такую ошибку
myButtonListener cannot be resolved to a variable.
Ну это понято что такой перменной нет. Потом перед onCreate пишу как вы указали
:
OnClickListener myButtonListener = new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(getBaseContext(), second.class);
startActivity(intent);
}
};
@Override
public void onCreate(Bundle savedInstanceState)
{
и тогда выдает ошибку и подчеркивает метод setOnClickListener
The method setOnClickListener(View.OnClickListener) in the type View is not applicable for the arguments (DialogInterface.OnClickListener)
не тот OnClickListener импортировали
ОтветитьУдалитьв import для данного случая должно быть:
import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;
а у вас видимо есть
import android.content.DialogInterface.OnClickListener;
вместо его нужно
import android.view.View.OnClickListener;
:) Анно! теперь все гуд, заработало. Эклипс автоматом ипорт прописал ну и само сабой мне неизвестно какие должны быть.
ОтветитьУдалить