воскресенье, 27 марта 2011 г.

Разработка приложения для Android. Часть 3. Hello world :)

  И так, мы уже знаем что такое Activity, Service, Broadcast Receiver и Content Provider, так же мы знаем как установить Eclipse и Android SDK, и можем подключить телефон для отладки. Теперь пришло время для Hello World! :)









  Запускаем 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 задано как "стартовое":
  Теперь посмотрим на файл 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 :). Если что-то не получается, спрашивайте.

P.S. Нет компьютера для разработки приложений для Android? Магазин б/у компьютеров в Киеве. А когда напишешь клёвое приложение, заработаешь на новый :)

5 комментариев:

  1. Когда назначаю кнопке ловлю событий .setOnClickListener
    ругается на то что тип myButtonListener не соответствует!
    мол надо android.view.View.OnClickListener
    вместо OnClickListener

    ОтветитьУдалить
  2. что-то у вас "мутно" написано :) Не совсем понятно. У вас не известен обработчик OnClickListener?
    View в import есть?

    ОтветитьУдалить
  3. Пишу так:

    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)

    ОтветитьУдалить
  4. не тот 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;

    ОтветитьУдалить
  5.  :) Анно! теперь все гуд, заработало. Эклипс автоматом ипорт прописал ну и само сабой мне неизвестно какие должны быть.

    ОтветитьУдалить