Согласно официальной документации по Android, активность – это одно целенаправленное действие, которое может выполнить пользователь.

Термин явно происходит от глагола act, который в основном означает выполнение действия или взаимодействие с чем-то.

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

Таким образом, деятельность может нечетко обозначать весь экран, с которым будет взаимодействовать пользователь.

Жареный рис с яйцом и овощами по-китайски, золотистый и хрустящий!

Жареный рис с яйцом...
Жареный рис с яйцом и овощами по-китайски, золотистый и хрустящий!

При таком подходе вот некоторые вещи, которые мы можем сделать с нашей активностью:

No. Действие Описание
1. Открыть новую активность Это заменит текущую активность или экран.
2. Закрыть текущую активность Так, чтобы она больше не была видна нам. Система Android не убьет его полностью, просто переместит в фоновый режим, чтобы вы не вернулись к нему снова.
3. Повернуть устройство Допустим, вы смотрите видео или играете в игру из этого приложения и хотите посмотреть его в другой раскладке. Этот процесс вызовет реорганизацию активности, чтобы удовлетворить ваши потребности в компоновке.

Выполнение вышеописанных действий заставляет систему android вызывать различные обратные вызовы жизненного цикла. По сути, это методы, которые вызываются в событийном порядке на различных этапах жизненного цикла активности. Например, создание, приостановка, возобновление, запуск, перезапуск, остановка и т.д.

Механизмы представления для активности.

В android активности могут быть представлены различными способами:

No. Механизм Описание
1. Полноэкранное окно : Самый распространенный способ представления активности. При этом они занимают весь экран.
2. Плавающие окна : Активности могут быть установлены как плавающие окна через тему с установленным атрибутом windowIsFloating.
3. Встраивание : Мероприятия могут быть встроены в другое мероприятие с помощью ActivityGroup.

Однако обратите внимание, что встраивание больше не является привлекательным, так как ActivityGroup был упразднен с введением Fragments еще на API уровне 13. Фрагменты" и Fragment Transaction API делают это лучше, более модульным способом. Если что, фрагменты, по сути, являются суб-активностями, со своим собственным жизненным циклом.

Определение класса Activity.

Давайте также посмотрим на программное описание активности.

Сначала он принадлежит пакету android.app:

package android.app;

Activity – это класс, подобный любому другому классу, но в то же время по-своему уникальный. Он также является публичным, поэтому его можно увидеть и использовать в других пакетах, не входящих в его собственный.

public class Activity..{}

Будучи классом, он также обладает объектно-ориентированными свойствами, которые есть у других классов, например:

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

Фактически класс Activity является производным от класса ContextThemeWrapper.

public class Activity extends ContextThemeWrapper..{}

Класс ContextThemeWrapper дает классу возможность манипулировать и изменять тему из того, что находится в обернутом контексте.

Кроме того, Activity реализует несколько интерфейсов:

public class Activity extends ContextThemeWrapper implements LayoutInflater.Factory2 Window.Callback KeyEvent.Callback View.OnCreateContextMenuListener ComponentCallbacks2{}
Дети и внучатые дети активности.

Это прямые подклассы и косвенные подклассы активности.

Вот прямые подклассы:

No. Activity Description
1. FragmentActivity Суперкласс, используемый активностями, желающими использовать Fragments и Loader API с помощью библиотеки поддержки.
2. NativeActivity Для тех, кто хочет, чтобы удобная активность была реализована исключительно в нативном коде.
3. ListActivity Активность, специализирующаяся на отображении списка элементов, привязанных к источнику данных.
4. ExpandableListActivity Деятельность, специализирующаяся на отображении расширяемого списка элементов, привязанных к источнику данных.
5. AliasActivity Обеспечивает псевдонимный механизм для активности. Для этого она запускает другую активность, а затем убивает себя.
6. AccountAuthenticatorActivity Суперкласс для создания активностей, реализующих AbstractAccountAuthenticator.
7. ~ActivityGroup~ Утратил силу еще в API 13 после введения Fragments. До этого это был способ создания экрана с несколькими встроенными активностями.

Это дочерние элементы активности.

Теперь давайте рассмотрим внуки/непосредственные подклассы.

No. Деятельность Главный родитель Описание
1. AppCompatActivity FragmentActivity AppCompatActivity является суперклассом для действий, планирующих использовать функции панели действий.
2. ~ActionBarActivity~ AppCompatActivity Утратил силу. До этого он использовался для предоставления функционала панели действий действиям. Теперь эта роль перешла к AppCompatActivity.
3. ~TabActivity~ ActivityGroup Утратил силу еще на 13 уровне API. До этого она использовалась для создания активностей с вкладками. Теперь это могут делать фрагменты.
4. PreferenceActivity ListActivity Суперкласс, который следует использовать тем, кто собирается показать иерархию предпочтений пользователям.
5. LauncherActivity ListActivity Отображает список всех действий, которые могут быть выполнены для данного намерения.

Возможности, которые класс Activity предоставляет своим дочерним элементам

Мы можем, и уже говорили, что деятельность представляет собой одно целенаправленное действие, которое может сделать пользователь.

Поэтому мы знаем, что это позволяет нам использовать и отображать представления и виджеты, с которыми пользователи могут взаимодействовать.

Однако, давайте теперь рассмотрим более подробные и специфические функциональные возможности с более низкого уровня, которые класс Activity предоставляет своим дочерним элементам.

1. Контекстные возможности
  1. Проверка различных разрешений : Например: checkPermission(String permission, int pid, int uid) определит, имеет ли конкретный процесс и ID пользователя, запущенный в системе, переданное разрешение, checkUriPermission(Uri uri, int pid, int uid, int modeFlags) определит, имеет ли конкретный процесс и ID пользователя, запущенный в системе, разрешение на доступ к переданному Uri и т.д.
  2. Подключение к службе приложения или ее создание : Контекст может быть использован для подключения к сервису приложения или его создания, если это необходимо. Это делается с помощью вызова метода bindService(Intent service, ServiceConnection conn, int flags).
    3.Создание других контекстов : Например, createConfigurationContext(Configuration overrideConfiguration) создаст новый объект Context для текущего контекста, но с ресурсами, настроенными на переданную конфигурацию, createPackageContext(String packageName, int flags) возвращает новый объект Context для заданного имени приложения.
  3. Список связанных баз данных и файлов : databaseList() предоставляет нам строковый массив с частными базами данных, ассоциированными с пакетом приложений данного Контекста, а fileList() возвращает строковый массив с частными файлами, ассоциированными с пакетом приложений данного Контекста.
  4. Удаление связанной базы данных и файла : Context предоставляет нам методы: deleteDatabase(String name) для удаления базы данных SQLiteDatabase, ассоциированной с пакетом приложения данного Context, и deleteFile(String name) для удаления данного частного файла, ассоциированного с пакетом приложения данного Context.
    6.Получение контекста приложения : Функция Context’а getApplicationContext() вернет нам единственный глобальный объект Application текущего процесса.
    7.Получение информации о приложении : С помощью getApplicationInfo() мы можем получить полную информацию о приложении текущего пакета Context.

Примеры быстрых действий

1. Как начать активность

Чтобы начать активность, вам нужен объект Intent. Давайте создадим метод, который может начать для нас активность. Этот метод будет принимать объект контекста, а также имя класса целевой активности, то есть той активности, которую мы хотим открыть.

    void start(Context c, Class e){
        Intent i = new Intent(,e);
        c.startActivity(i);
        //a.finish();
    }
2. Как завершить/закончить активность

Для завершения активности мы используем метод finish().

    void killIntent(Context c){
        Intent i = new Intent(c,MainActivity.class);
        c.startActivity(i);
        c.finish();
    }
3. Как определить, находится ли активность на переднем плане

Этот пример метода позволяет определить, находится ли активность на переднем плане или нет. Он возвращает булево значение, основанное на результате.

    public static boolean isForeground(Context context, String className) {
        if (context == null || TextUtils.isEmpty(className)) {
            returnfalse;
        }
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(1);
        if (list != null && list.size() > 0) {
            ComponentName cpn = list.get(0).topActivity;
            if (className.equals(cpn.getClassName())) {
                return true;
            }
        }
        returnfalse;
    }

    public static boolean isForeground(Activity activity) {
        return isForeground(activity, activity.getClass().getName());
    }
4. Как обрабатывать обратную печать

Допустим, вы хотите правильно обработать обратное нажатие, то есть показать пользователю диалог предупреждения, прежде чем просто выйти из текущей активности. В этом случае вы создаете метод handleBackPress().

    public void handleBackPress() {
        mExitDialog = true;
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style
                .AlertDialogStyle);
        builder.setTitle(R.string.leave_chat)
                .setMessage(R.string.leave_chat_desc)
                .setCancelable(false)
                .setNegativeButton(R.string.cancel,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                mExitDialog = false;
                                dialog.cancel();
                            }
                        })
                .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        //showSaveHistoryDialog();
                    }
                });
        AlertDialog alert = builder.create();
        alert.show();
        alert.getWindow().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color
                .black14)));
    }

В приведенном выше случае мы показываем пользователю диалог предупреждения, когда он нажимает кнопку "Назад".

Android AppCompatActivity

AppCompatActivity – это класс, который действует как суперкласс для действий, которые хотят воспользоваться возможностями панели действий библиотеки поддержки.

Требования для использования android.support.v7.app.ActionBar внутри вашей активности следующие:

  1. Должен быть запущен API уровня 7 или выше.
  2. Затем расширить этот класс.
  3. Установите тему активности на android.support.v7.appcompat.R.style#Theme_AppCompat Theme.AppCompat или аналогичную тему.

Темы устанавливаются в AndroidManifest.xml, например

<activity
      android_name=".MainActivity"
      android_label="@string/app_name"
      android_theme="@style/AppTheme.NoActionBar">....</activity>

AppCompatActivity определяется внутри пакета android.support.v7.app:

package android.support.v7.app;

Она происходит от android.support.v4.app.FragmentActivity:

public class AppCompatActivity extends FragmentActivity{}

И реализует несколько интерфейсов:

public class AppCompatActivity extends FragmentActivity implements AppCompatCallback,TaskStackBuilder.SupportParentable, ActionBarDrawerToggle.DelegateProvider {}

Вот пример класса, производного от AppCompatActivity:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

Установка темы AppCompatActivity.

Тема AppCompatActivity, как и другие темы активности, может быть установлена либо через androidmanifest

<activity
      android_name=".MainActivity"
      android_label="@string/app_name"
      android_theme="@style/AppTheme.NoActionBar">....</activity>

либо программно с помощью метода setTheme():

public void setTheme(@StyleRes final int resid) {}

Мы можем создать пользовательскую материальную тему, которая будет использоваться AppCompatActivity:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

Затем мы также можем установить эту тему глобально для всего приложения, используя атрибут android:theme="...":

<application
        android_allowBackup="true"
        android_icon="@mipmap/ic_launcher"
        android_label="@string/app_name"
        android_roundIcon="@mipmap/ic_launcher_round"
        android_supportsRtl="true"
        android_theme="@style/AppTheme">
        <activity android_name=".MainActivity">

        </activity>
    </application>

Получение панели действий AppCompatActivity.

Приложение AppCompatActivity предоставляет нам метод для получения ссылки на его панель действий:

public ActionBar getSupportActionBar(){}

Если таковой нет, то возвращается null.

Использование ToolBar в качестве ActionBar в AppCompatActivity.

Мы можем использовать android.support.v7.widget.Toolbar вместо панели действий. Панели инструментов имеют преимущество гибкости в использовании и настройке.

ActionBar обычно являются частью непрозрачного декора окна активности. Следовательно, они контролируются фреймворком.

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

Допустим, у нас есть панель инструментов, определенная следующим образом:

...
<android.support.v7.widget.Toolbar
            android_id="@+id/toolbar"
            android_layout_width="match_parent"
            android_layout_height="?attr/actionBarSize"
            android_background="?attr/colorPrimary"
            app_popupTheme="@style/AppTheme.PopupOverlay" />
...

внутри нашего activity_main.xml.

Мы можем использовать ее как панель действий, используя setSupportActionBar(), где мы передаем ссылку toolbar в качестве параметра.

public void setSupportActionBar(@Nullable Toolbar toolbar) {}

Пример:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

Чтобы очистить его, нужно передать null.

Android Studio – Создание проекта пустой активности

Как создать пустую активность в Android Studio.

Как создать проект в android studio с шаблоном Empty Activity. Мы видим, как использовать Android studio для создания пустой активности.

Empty Activity – это просто шаблон для разработки под android. Это самый простой шаблон для начала работы, поскольку он генерирует для нас один java-файл и один xml-файл макета.

Вот процесс.

  1. Сначала создайте пустой проект в android studio. Перейдите в меню Файл –> Новый проект.
  2. Введите название приложения и выберите название компании.
  3. Выберите минимальный SDK.
  4. Выберите Пустая активность.
  5. Нажмите кнопку Finish.

Это создаст для нас проект со следующим:

No. Имя Тип Описание
1. activity_main.xml XML Layout Будет раздута в MainActivity View. Здесь вы добавите свои представления и виджеты.
2. 2. MainActivity.java Класс Ваша активность Launcher.

Активность будет автоматически зарегистрирована в android_manifest.xml. Мероприятия Android являются компонентами и обычно должны быть зарегистрированы как компонент приложения.
Если вы создали свою активность вручную, то зарегистрируйте ее внутри <application>...<application> следующим образом, заменив MainActivity на имя вашей активности:

        <activity android_name=".MainActivity">
            <intent-filter>
                <action android_name="android.intent.action.MAIN" />
                <category android_name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

Вы можете видеть, что в качестве фильтров намерения указаны одно действие и категория. Категория делает нашу MainActivity пусковой активностью. Запускающие активности выполняются первыми при запуске приложения android.

Android Studio – Создание проекта основной активности

*Как создать проект в android studio с шаблоном Basic Activity.

Это руководство для начинающих, чтобы увидеть, как создать проект android на основе базового шаблона.

Вот процесс:

  1. Сначала создайте новый проект в android studio. Перейдите в меню Файл –> Новый проект.
  2. Введите название приложения и выберите название компании.
  3. Выберите минимальный SDK.
  4. Выберите Базовая активность.
  5. Нажмите кнопку Готово.

Базовая активность будет иметь панель инструментов и плавающую кнопку действия, уже добавленные в макет.

Обычно при использовании этой опции создается два макета:

Нет. Имя Тип Описание
1. activity_main.xml XML Layout Будет раздута в макет MainActivity Layout. Обычно содержит appbarlayout с панелью инструментов. Также имеет плавающую кнопку действия.
2. content_main.xml XML Layout Будет включен в activity_main.xml. Здесь вы добавляете свои представления и виджеты.
3. MainActivity.java Класс Главная активность.

В этом примере я использовал основную активность.

Активность будет автоматически зарегистрирована в файле android_manifest.xml. Мероприятия Android являются компонентами и обычно должны быть зарегистрированы как компонент приложения.

Если вы создали свою активность вручную, то зарегистрируйте ее внутри <application>...<application> следующим образом, заменив MainActivity на имя вашей активности:


        <activity android_name=".MainActivity">

            <intent-filter>

                <action android_name="android.intent.action.MAIN" />

                <category android_name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

Вы можете видеть, что в качестве фильтров намерения указаны одно действие и категория. Категория делает нашу MainActivity пусковой активностью. Запускающие активности выполняются первыми при запуске приложения android.

Преимущество создания проекта Basic Activity

Вы можете выбрать пустую активность вместо базовой активности для этого проекта.

Однако базовая активность имеет следующие преимущества:

Нет. Преимущество
1. Предоставляет нам готовую панель инструментов, которая предоставляет нам функции actionbar, но при этом легко настраивается 2. Предоставляет нам макет панели приложений, который реализует концепции Material Design Appbar.
2. Предоставляет нам макет панели инструментов, который реализует концепции панели инструментов Material Design.
3. Предоставляет FloatinActionButton, которую мы можем легко использовать для инициирования быстрых действий, особенно в таких примерах, как.
4. Отделяет наши пользовательские представления контента и виджеты от шаблонизаторов, таких как панель инструментов.

Сгенерированная структура проекта

AndroidStudio сгенерирует для вас проект с конфигурацией по умолчанию с помощью набора файлов и каталогов.

Вот наиболее важные из них:

No. Файл Основная ответственность
1. build/ Каталог, содержащий ресурсы, которые были скомпилированы в результате сборки приложения и классы, сгенерированные инструментами android. Таким инструментом является файл R.java. Файл R.java обычно содержит ссылки на ресурсы приложения.
2. libs/ Для хранения библиотек, которые мы используем в нашем проекте.
3. src/main/ Для хранения исходного кода нашего приложения. Это основная папка, с которой вы работаете.
4. src/main/java/ Содержит наши java-классы, организованные в виде пакетов.
5. src/main/res/ Содержит следующие папки ресурсов проекта.
6. src/main/res/drawable/ Содержит наши ресурсы для рисования.
7. src/main/res/layout/ Содержит ресурсы макета.
8. src/main/res/menu/ Содержит XML-код ресурсов меню.
9. src/main/res/values/ Содержит XML-код ресурсов значений. Они определяют наборы пар имя-значение и могут быть строками, стилями и цветами.
10. AndroidManifest.xml Этот файл автоматически генерируется при создании проекта android. Он определяет основную информацию, необходимую системе android, такую как имя приложения, имя пакета, разрешения, действия, намерения и т.д.
11. build.gradle Скрипт Gradle, используемый для сборки приложения android.

Деятельность Android – передача примитивов от одной деятельности к другой

Давайте посмотрим, как передавать примитивные типы данных от одного вида деятельности к другому. Мы передаем:

  • Строки
  • Целое число
  • Boolean (через CheckBox)

Первая активность

Вторая активность

во вторую активность и покажите их во второй активности.

Файлы Gradle

Мы добавим зависимости в файл build.gradle на уровне приложения.

1. Build.gradle

Вот наш уровень приложения в файле build.gradle:

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        testImplementation 'junit:junit:4.12'
        implementation 'com.android.support:appcompat-v7:24.2.1'
        implementation 'com.android.support:design:24.2.1'
    }

`

РЕСУРСЫ МАКЕТА

У нас есть три xml-макета;

  1. activity_main.xml
  2. content_main.xml
  3. activity_second.xml

1. activity_main.xml

  • Макет шаблона для нашей основной деятельности.

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout

        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_fitsSystemWindows="true"
        tools_context="com.tutorials.hp.primitivespassing.MainActivity">

        <android.support.design.widget.AppBarLayout
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            android_theme="@style/AppTheme.AppBarOverlay">

            <android.support.v7.widget.Toolbar
                android_id="@+id/toolbar"
                android_layout_width="match_parent"
                android_layout_height="?attr/actionBarSize"
                android_background="?attr/colorPrimary"
                app_popupTheme="@style/AppTheme.PopupOverlay" />

        </android.support.design.widget.AppBarLayout>

        <include layout="@layout/content_main" />

        <android.support.design.widget.FloatingActionButton
            android_id="@+id/fab"
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_layout_gravity="bottom|end"
            android_layout_margin="@dimen/fab_margin"
            android_src="@android:drawable/ic_dialog_email" />

    </android.support.design.widget.CoordinatorLayout>

2. content_main.xml

  • Давайте добавим сюда наши edittexts и checkbox.

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout

        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"
        app_layout_behavior="@string/appbar_scrolling_view_behavior"
        tools_context="com.tutorials.hp.primitivespassing.MainActivity"
        tools_showIn="@layout/activity_main">

        <LinearLayout
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            android_orientation="vertical">

            <android.support.design.widget.TextInputEditText
                android_id="@+id/nameTxt"
                android_layout_width="match_parent"
                android_layout_height="wrap_content"
                android_enabled="true"
                android_focusable="true"
                android_hint="Name"
                android_textSize="25dp"
                android_textStyle="bold" />

            <android.support.design.widget.TextInputEditText
                android_id="@+id/txtID"
                android_layout_width="match_parent"
                android_layout_height="wrap_content"
                android_enabled="true"
                android_focusable="true"
                android_hint="ID"
                android_textSize="25dp"
                android_textStyle="bold" />

            <LinearLayout
                android_layout_width="match_parent"
                android_layout_height="wrap_content"
                android_orientation="horizontal"
                android_padding="5dp">

                <TextView
                    android_layout_width="250dp"
                    android_layout_height="wrap_content"
                    android_text="Technology Exists ??"
                    android_textSize="25dp"
                    android_textStyle="bold" />

                <CheckBox
                    android_id="@+id/techExists"
                    android_layout_width="wrap_content"
                    android_layout_height="wrap_content"
                    android_checked="true"
                    android_textSize="25dp" />
            </LinearLayout>
            <Button android_id="@+id/sendBtn"
                android_layout_width="wrap_content"
                android_layout_height="60dp"
                android_text="Send"
                android_clickable="true"
                android_padding="5dp"
                android_background="#009968"
                android_textColor="@android:color/white"
                android_textStyle="bold"
                android_textSize="20dp" />
        </LinearLayout>
    </RelativeLayout>

3. activity_second.xml

  • Вот код для второй активности.
  • Эта активность будет получать данные от основной активности и показывать их здесь.

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout

        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.tutorials.hp.primitivespassing.SecondActivity">

        <LinearLayout
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            android_orientation="vertical">

            <LinearLayout
                android_layout_width="match_parent"
                android_layout_height="wrap_content"
                android_orientation="horizontal"
                android_padding="5dp">

                <TextView
                    android_layout_width="250dp"
                    android_layout_height="wrap_content"
                    android_text="NAME"
                    android_textSize="25dp"
                    android_textStyle="bold" />

                <TextView
                    android_id="@+id/nameTxtSecond"
                    android_layout_width="match_parent"
                    android_layout_height="wrap_content"
                    android_text="value received"
                    android_textSize="25dp" />
            </LinearLayout>

            <LinearLayout
                android_layout_width="match_parent"
                android_layout_height="wrap_content"
                android_orientation="horizontal"
                android_padding="5dp">

                <TextView
                    android_layout_width="250dp"
                    android_layout_height="wrap_content"
                    android_text="ID"
                    android_textSize="25dp"
                    android_textStyle="bold" />

                <TextView
                    android_id="@+id/txtIDSecond"
                    android_layout_width="match_parent"
                    android_layout_height="wrap_content"
                    android_text="value received"
                    android_textSize="25dp" />
            </LinearLayout>

            <LinearLayout
                android_layout_width="match_parent"
                android_layout_height="wrap_content"
                android_orientation="horizontal"
                android_padding="5dp">

                <TextView
                    android_layout_width="250dp"
                    android_layout_height="wrap_content"
                    android_text="Technology Exists ??"
                    android_textSize="25dp"
                    android_textStyle="bold" />

                <CheckBox
                    android_id="@+id/techExistsSecond"
                    android_layout_width="wrap_content"
                    android_layout_height="wrap_content"
                    android_checked="true"
                    android_textSize="25dp" />
            </LinearLayout>
        </LinearLayout>
    </RelativeLayout>

JAVA КЛАССЫ

У нас есть два класса или две активности:

  1. MainActivity.java
  2. SecondActivity.java

1. Класс MainActivity

  • Наша MainActivity.
  • Мы будем передавать данные из этой активности ti второй активности.

    package com.tutorials.hp.primitivespassing;

    import android.content.Intent;
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.TextInputEditText;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.widget.Button;
    import android.widget.CheckBox;

    public class MainActivity extends AppCompatActivity {

        //DECLARE VIEWS
        private TextInputEditText txtName, txtID;
        private CheckBox chkTechnologyExists;
        private Button sendBtn;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);

            this.initializeViews();

            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                }
            });

            //WHEN SEND BTN IS CLICKED,SEND
            sendBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    sendData();
                }
            });
        }

        /*
        REFERENCE VIEWS WE ARE USING
         */
        private void initializeViews() {
            txtName = (TextInputEditText) findViewById(R.id.nameTxt);
            txtID = (TextInputEditText) findViewById(R.id.txtID);
            chkTechnologyExists = (CheckBox) findViewById(R.id.techExists);
            sendBtn = (Button) findViewById(R.id.sendBtn);

        }

        /*
        SEND DATA TO SECOND ACTIVITY
         */
        private void sendData() {
            //GET PRIMITIVE VALUES TO SEND
            String name = txtName.getText().toString();
            int id = Integer.parseInt(txtID.getText().toString());
            Boolean techExists = chkTechnologyExists.isChecked();

            //PACK THEM IN AN INTENT OBJECT
            Intent i = new Intent(this, SecondActivity.class);
            i.putExtra("NAME_KEY", name);
            i.putExtra("ID_KEY", id);
            i.putExtra("TECHEXISTS_KEY", techExists);

            //LETS LEAVE OUR TXTS CLEARED
            txtName.setText("");
            txtID.setText("");

            //START SECOND ACTIVITY
            this.startActivity(i);
        }
    }

2. Класс Second Activity

  • Наша вторая активность.
  • Будет получать данные от основной активности и отображать их в текстовых окнах и чекбоксе.

    package com.tutorials.hp.primitivespassing;

    import android.support.design.widget.TextInputEditText;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.CheckBox;
    import android.widget.Spinner;
    import android.widget.TextView;
    import android.widget.Toast;

    public class SecondActivity extends AppCompatActivity {

        //DECALRE SECOND ACTIVITY VIEWS
        TextView txtName2;
        TextView txtID2;
        CheckBox chkTechnologyExists2;

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

            //INITIALIZE THESE VIEWS
            txtName2 = (TextView) findViewById(R.id.nameTxtSecond);
            txtID2 = (TextView) findViewById(R.id.txtIDSecond);
            chkTechnologyExists2 = (CheckBox) findViewById(R.id.techExistsSecond);

            //RECEIVE DATA FROM MAIN ACTIVITY
            String name = getIntent().getStringExtra("NAME_KEY");
            int id = getIntent().getIntExtra("ID_KEY", 0);
            Boolean techExists = getIntent().getBooleanExtra("TECHEXISTS_KEY", false);

            //SHOW A TOAST
            Toast.makeText(SecondActivity.this, name, Toast.LENGTH_LONG).show();

            //SET THE DATA TO OUR LOCAL VIEWS
            txtName2.setText(name);
            txtID2.setText(String.valueOf(id));
            chkTechnologyExists2.setChecked(techExists);
        }
    }

Android ListActivity

Учебник и примеры Android ListActivity.

ListActivity – это активность, которая отображает список элементов путем привязки к источнику данных, такому как массив или курсор. ListActivity также предоставляет нам обработчики событий, когда пользователь выбирает элемент.

Этот класс является производным от класса Activity. ListActivity предназначен для использования, когда вы планируете использовать ListView. На самом деле он действительно содержит объект ListView, который может быть привязан к различным источникам данных, обычно либо к массиву, либо к курсору, содержащему результаты запроса.

Определение API ListActivity

ListActivity, как мы уже говорили, происходит от класса Activity.

public class ListActivity extends Activity

Вот иерархия наследования:

java.lang.Object
   ↳    android.content.Context
       ↳    android.content.ContextWrapper
           ↳    android.view.ContextThemeWrapper
               ↳    android.app.Activity
                   ↳    android.app.ListActivity

Подклассы List Activity

Вот классы, которые являются производными от ListActivity:

No. Класс Описание
1. LauncherActivity Класс, который отображает список всех действий, которые могут быть выполнены для данного намерения. Запускается при нажатии.
2. 2. PreferenceActivity Базовый класс для деятельности, показывающей пользователю иерархию предпочтений.

Макет экрана

ListActivity имеет макет по умолчанию, который состоит из одного полноэкранного списка в центре экрана. Однако, если вы хотите, вы можете настроить макет экрана, установив свой собственный макет представления с помощью setContentView() в onCreate(). Для этого ваше собственное представление ДОЛЖНО содержать объект ListView с id "@android:id/list" (или list, если это в коде)

По желанию, ваше пользовательское представление может содержать другой объект представления любого типа для отображения, когда представление списка пусто. Этот нотификатор "пустого списка" должен иметь id "android:id/empty". Обратите внимание, что при наличии пустого представления, представление списка будет скрыто, если нет данных для отображения.

Следующий код демонстрирует (уродливый) пользовательский макет экрана. Он имеет список с зеленым фоном и альтернативное красное сообщение "нет данных".

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout
         android_orientation="vertical"
         android_layout_width="match_parent"
         android_layout_height="match_parent"
         android_paddingLeft="8dp"
         android_paddingRight="8dp">

     <ListView android_id="@android:id/list"
               android_layout_width="match_parent"
               android_layout_height="match_parent"
               android_background="#00FF00"
               android_layout_weight="1"
               android_drawSelectorOnTop="false"/>

     <TextView android_id="@android:id/empty"
               android_layout_width="match_parent"
               android_layout_height="match_parent"
               android_background="#FF0000"
               android_text="No data"/>
 </LinearLayout>

Лучшие примеры ListActivity для Android

В этом разделе мы рассмотрим несколько полных примеров ListActivity.

1. ListActivity и OnItemClick

В этом первом примере мы рассмотрим, как заполнить ListActivity данными из простого массива. Затем мы посмотрим, как обрабатывать события OnItemClick.

API, которые мы используем

Давайте начнем с определения нескольких API, которые мы будем использовать в этом примере.

(a). ListActivity

Этот класс принадлежит к android.app. Это activity, который отображает список элементов путем привязки к источнику данных, такому как массив или курсор, и предоставляет обработчики событий, когда пользователь выбирает элемент.

(b). Bundle

Bundle – это отображение значений String на различные типы Parcelable.

Читайте о бандле здесь.

(c). View

Этот класс представляет собой основной строительный блок для компонентов пользовательского интерфейса. Представление занимает прямоугольную область на экране и отвечает за отрисовку и обработку событий.

О представлениях читайте здесь.

(c). ArrayAdapter

Адаптер массива – это конкретный BaseAdapter, который опирается на массив произвольных объектов. По умолчанию этот класс ожидает, что предоставленный идентификатор ресурса ссылается на один TextView.

Читайте об ArrayAdapter здесь.

(d). ListView

ListView – это представление, которое показывает элементы в вертикально прокручиваемом списке. Элементы поступают из ListAdapter, связанного с этим представлением.

Читайте о ListView здесь.

MyListActivity.java

import android.app.ListActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MyListActivity extends ListActivity {

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

        String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
                "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
                "Linux", "OS/2" };
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,values);
        setListAdapter(adapter);

    }
    @Override
    protected  void  onListItemClick(ListView l, View v, int position, long id){

        String item = (String) getListAdapter().getItem(position);
        Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show();

    }
}

activity_my_list.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    tools_context="com.codekul.myandroidlistactivity.MyListActivity">

    <TextView
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_text="Hello World!"
        app_layout_constraintBottom_toBottomOf="parent"
        app_layout_constraintLeft_toLeftOf="parent"
        app_layout_constraintRight_toRightOf="parent"
        app_layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

Скачать

No. Расположение Ссылка
1. GitHub Browse
2. GitHub Original Creator: @1sumit 2.

2. Пример ListActivity и ArrayAdapter

Давайте заполним ListActivity именами кошек и обработаем события Click. Для этого нам не нужен макет.

MainActivity.java

import android.app.ListActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends ListActivity {

    final String[] catNamesArray = new String[] { "Рыжик", "Барсик", "Мурзик",
            "Мурка", "Васька", "Томасина", "Бобик", "Кристина", "Пушок",
            "Дымка", "Кузя", "Китти", "Барбос", "Масяня", "Симба" };
    private ArrayAdapter<String> mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mAdapter = new ArrayAdapter<>(this,
                android.R.layout.simple_list_item_1, catNamesArray);
        setListAdapter(mAdapter);

    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
    }
}

Скачать

No. Расположение Ссылка
1. GitHub Download
2. GitHub Browse 1.
2. GitHub Оригинальный создатель: @disiol 2.

3. ListActivity с AsyncTask

MainActivity.java


import android.app.ListActivity;
import android.content.Intent;
import android.os.AsyncTask;
import android.view.View;
import android.widget.Adapter;
import android.widget.ListView;

import java.util.List;

public final class AppPickerActivity extends ListActivity {

  private AsyncTask<Object,Object,List<AppInfo>> backgroundTask;

  @Override
  protected void onResume() {
    super.onResume();
    backgroundTask = new LoadPackagesAsyncTask(this);
    backgroundTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
  }

  @Override
  protected void onPause() {
    AsyncTask<?,?,?> task = backgroundTask;
    if (task != null) {
      task.cancel(true);
      backgroundTask = null;
    }
    super.onPause();
  }

  @Override
  protected void onListItemClick(ListView l, View view, int position, long id) {
    Adapter adapter = getListAdapter();
    if (position >= 0 && position < adapter.getCount()) {
      String packageName = ((AppInfo) adapter.getItem(position)).getPackageName();
      Intent intent = new Intent();
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
      intent.putExtra("url", "market://details?id=" + packageName);
      setResult(RESULT_OK, intent);
    } else {
      setResult(RESULT_CANCELED);
    }
    finish();
  }

}

4. ListActivity – Нажмите, чтобы открыть новую активность

Это пример ListActivity, в котором мы рассмотрим, как показывать элементы в ListActivity. Затем, когда пользователь нажимает на один элемент, мы открываем новую активность.

MainActivity.java

import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends ListActivity {

    String[] names;

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

        names = getResources().getStringArray(R.array.friends);
        setListAdapter(new ArrayAdapter<String>(this, R.layout.friend_item, names));

    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        Intent in = new Intent(this, SecondActivity.class);

        in.putExtra("message", getString(R.string.show_greetings)+ " " + names[(int) id] + "!" );

        startActivity(in);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.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();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

SecondActivity.java

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class SecondActivity extends Activity {

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

        Intent in = getIntent();

        TextView txtName = (TextView) findViewById(R.id.txtGreetingName);
        txtName.setText(in.getStringExtra("message"));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_second, 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();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

activity_main.xml

<RelativeLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    android_paddingBottom="@dimen/activity_vertical_margin"
    tools_context=".MainActivity">

    <TextView android_text="@string/hello_world"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_textSize="24sp"
        android_layout_alignParentTop="true"
        android_layout_centerHorizontal="true"
        android_layout_marginTop="54dp" />

</RelativeLayout>

activity_second.xml

<RelativeLayout
     android_layout_width="match_parent"
    android_layout_height="match_parent" android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    android_paddingBottom="@dimen/activity_vertical_margin"
    tools_context="com.example.paulorogerio.friendgreeting.SecondActivity">

    <TextView android_text="@string/hello_world"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_textSize="24sp"
        android_gravity="center_vertical|center_horizontal"
        android_id="@+id/txtGreetingName"
        android_layout_alignParentTop="true"
        android_layout_centerHorizontal="true"
        android_layout_marginTop="55dp" />

</RelativeLayout>

friend_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView
    android_layout_width="match_parent" android_layout_height="match_parent"
    android_text="Friend Name"
    android_gravity="center_vertical|center_horizontal"
    android_textSize="24sp"
    android_padding="20dp">

</TextView>

Загрузка

No. Расположение Ссылка
1. GitHub Download
2. GitHub Browse 1.
2. GitHub Оригинальный создатель: @paulonova 2.

5. ListActivity – Populate From XML stored in Assets

В этом примере мы рассмотрим, как использовать XmlPullParser для разбора XML-документа, хранящегося в каталоге Assets нашего приложения.
Затем мы покажем результаты разбора XML, которые будут состоять из изображений и текста, в нашем ListActivity.

Мы будем загружать из нашего XML-документа заголовок, ссылку и изображения в наш ListView. Мы откроем наш XML из папки assets в InputStream. Затем у нас будет метод ParseXML(), который разберет наш XML с помощью XmlPullParser.

Класс ImagesAdapter будет адаптировать изображения и текст из XML в пользовательский ListView. Он будет использовать ArrayAdapter в качестве базового класса адаптера.

ParseXML.java

Этот ParseXML является основной деятельностью.

package com.example.parsexml;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

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

public class ParseXML extends Activity {
    InputStream xmlStream;
    ArrayList<ItemData> list;
    XMLHandler handler;
    ListView listView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_parse_xml);
        try {
            xmlStream = this.getAssets().open("ItemXML.xml");
            ParseXML();
            list = handler.getItemList();
            LoadImagesFromUrl();
            ImageAdapter adapter = new ImageAdapter(ParseXML.this, R.layout.imagelist, list);
            listView = (ListView) findViewById(R.id.imageList);
            listView.setAdapter(adapter);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_parse_xml, menu);
        return true;
    }

    public void ParseXML(){

        try {
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser sp = spf.newSAXParser();
            XMLReader reader = sp.getXMLReader();
            handler = new XMLHandler();
            reader.setContentHandler(handler);
            reader.parse(new InputSource(xmlStream));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public void LoadImagesFromUrl(){
        for (int i=0; i<list.size();i++){
            LoadChart loader = new LoadChart(ParseXML.this, list.get(i).link);
            loader.execute();
            list.get(i).bitmap = loader.getBitmap();
        }
    }
}

ItemData.java

Это класс модели, представляющий один элемент XML, из которого будет состоять наш элемент ListView. У нас будет заголовок, ссылка, а также растровое изображение.

package com.example.parsexml;

import android.graphics.Bitmap;

public class ItemData {
    String title;
    String link;
    Bitmap bitmap;
    public Bitmap getBitmap() {
        return bitmap;
    }
    public void setBitmap(Bitmap bitmap) {
        this.bitmap = bitmap;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getLink() {
        return link;
    }
    public void setLink(String link) {
        this.link = link;
    }

}

ImageAdapter.java

Это пользовательский класс адаптера, производный от ArrayAdapter. Он использует шаблон ViewHolder для хранения представлений, которые будут перерабатываться. ViewHolder – это простой класс для хранения виджетов TextView и ImageView для повторного использования, вместо того, чтобы раздувать их каждый раз, когда вызывается метод getView().

package com.example.parsexml;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ImageAdapter extends ArrayAdapter{
    ViewHolder holder;
    Context ctx;
    List<ItemData> list;
    LoadChart loader;
    public ImageAdapter(Context context, int textViewResourceId,
            List<ItemData> objects) {
        super(context, textViewResourceId, objects);
        ctx = context;
        list = objects;

        // TODO Auto-generated constructor stub
    }
    private class ViewHolder{
        TextView titleView;
        ImageView img;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        if(convertView == null){
            LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(ctx.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.imagelist, null);
            holder = new ViewHolder();
            holder.img = (ImageView) convertView.findViewById(R.id.linkimage);
            holder.titleView = (TextView) convertView.findViewById(R.id.title);

            convertView.setTag(holder);

        }
        else{
            holder = (ViewHolder) convertView.getTag();
        }
        holder.titleView.setText(list.get(position).title);
        loader = new LoadChart(ctx, holder.img, list.get(position).link);
        loader.execute();

        return convertView;

    }

}

XMLHandler.java

Этот класс будет производным от класса org.xml.sax.helpers.DefaultHandler. DefaultHandler – это базовый класс по умолчанию для обработчиков событий SAX2. В этом классе мы переопределяем несколько методов, таких как startElement(), endElement() и characters().

package com.example.parsexml;

import java.util.ArrayList;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class XMLHandler extends DefaultHandler{
    private ArrayList<ItemData> itemList = new ArrayList<ItemData>();
    String value = "";
    ItemData item = null;
    Boolean flag = false;

    public ArrayList<ItemData> getItemList() {
        return itemList;
    }

    public void setItemList(ArrayList<ItemData> itemList) {
        this.itemList = itemList;
    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        // TODO Auto-generated method stub
        if(flag){
            value = new String(ch, start, length);
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        // TODO Auto-generated method stub
        flag = false;

        if(localName.equalsIgnoreCase("title")){
            item.setTitle(value);
        }
        if(localName.equalsIgnoreCase("link")){
            item.setLink(value);
        }
        if(localName.equalsIgnoreCase("item")){
            itemList.add(item);
        }

    }

    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        // TODO Auto-generated method stub
        flag = true;
        value = "";
        if(localName.equalsIgnoreCase("item")){
            item = new ItemData();

        }
    }

}

LoadChart.java

Этот класс будет производным от абстрактного класса asynctask. Таким образом, это позволит нам загружать наш XML в отдельном потоке.

package com.example.parsexml;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ImageView;

public class LoadChart extends AsyncTask<Void, Void, Bitmap> {
    private ImageView img;
    private Context con;
    static String urlString ;
    Bitmap bitmap= null;

    public Bitmap getBitmap() {
        return bitmap;
    }

    public void setBitmap(Bitmap bitmap) {
        this.bitmap = bitmap;
    }

    public LoadChart(Context context, ImageView img1, String url) {
        this.img = img1;
        this.con = context;
        urlString = url;
    }

    public LoadChart(Context context, String url) {
        this.urlString = url;
        this.con = context;
    }

    @Override
    protected void onPreExecute() {

        super.onPreExecute();
    }

    @Override
    protected Bitmap doInBackground(Void... params) {

        Bitmap bitmap = DownloadImage();

        return bitmap;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        this.bitmap = bitmap;
        //img.setImageBitmap(bitmap);

    }

    private static InputStream OpenHttpConnection(String urlString)
            throws IOException {

        Log.d("palval", "OpenHttpConnection");
        InputStream in = null;
        int response = -1;

        URL url = new URL(urlString);
        URLConnection conn = url.openConnection();

        if (!(conn instanceof HttpURLConnection))
            throw new IOException("Not an HTTP connection");

        try {
            HttpURLConnection httpConn = (HttpURLConnection) conn;
            httpConn.setAllowUserInteraction(false);
            httpConn.setInstanceFollowRedirects(true);
            httpConn.setRequestMethod("GET");
            httpConn.connect();

            response = httpConn.getResponseCode();

            if (response == HttpURLConnection.HTTP_OK) {
                in = httpConn.getInputStream();
            }

            String res = Integer.toString(response);
        } catch (Exception ex) {
            throw new IOException("Error connecting");
        }
        return in;
    }

    public static Bitmap DownloadImage() {
        Log.d("palval", "DownloadImage");
        Bitmap bitmap = null;
        InputStream in = null;
        try {

             //in = OpenHttpConnection("https://chart.googleapis.com/chart?chs=440x220&chd=t:60,40&cht=p3&chl=Hello|World");
            in = OpenHttpConnection(urlString);
            bitmap = BitmapFactory.decodeStream(in);
            in.close();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        return bitmap;
    }

}

Скачать

No. Расположение Ссылка
1. GitHub Скачать
2. GitHub Browse
2. GitHub Original Creator: @bansal2211 2. GitHub Original Creator: @bansal2211

Android ListActivity – С изображениями, текстом и OnItemClick ArrayAdapter

Android ListActivity Изображения Текст

Это руководство по пользовательскому listview для android. Как показывать изображения и текст в listview. Мы используем arrayadapter в качестве нашего адаптера. Мы также рассмотрим, как обрабатывать пользовательские щелчки по элементам listview.

Раздел 1 : Класс CustomAdapter

Это наш класс CustomAdapter. Он будет подклассом android.widget.ArrayAdapter. Подробнее об ArrayAdapter читайте здесь.

Это наш класс Adapter.

    package com.tutorials.customlistviewarrayadapter;

    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;

    public class CustomAdapter extends ArrayAdapter<String>{

      final Context c;
      String[] values;

      //CONSTRUCTOR
      public CustomAdapter(Context context, String[] values) {
        super(context,R.layout.activity_main, values);

        this.c=context;
        this.values=values;

      }

      @Override
      public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflator=(LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        //INFLATE OUR XML LAYOUT TO ROW
        View row=inflator.inflate(R.layout.activity_main, parent,false);

        //DECLARE FIELDS CONTAINED IN OUR LAYOUR
        TextView tv=(TextView) row.findViewById(R.id.textView1);
        ImageView img=(ImageView) row.findViewById(R.id.imageView1);

        //GET AN ITEM FROM ARRAY
        String item=values[position];

        //DYNAMICALLY SET TEXT AND IMAGES DEPENDING ON ITEM IN ARRAY
        if(item.equals("android"))
        {
          tv.setText(item+" Programming language");
          img.setImageResource(R.drawable.android);
        }else if(item.equals("java"))
        {
          tv.setText(item+" Programming language");
          img.setImageResource(R.drawable.java);
        }else if(item.equals("c#"))
        {
          tv.setText(item+" Programming language");
          img.setImageResource(R.drawable.csharp);
        }else if(item.equals("mysql"))
        {
          tv.setText(item+" Database language");
          img.setImageResource(R.drawable.mysql);
        }else if(item.equals("access"))
        {
          tv.setText(item+" Database language");
          img.setImageResource(R.drawable.access);
        }else if(item.equals("excel"))
        {
          tv.setText(item+" Microsoft");
          img.setImageResource(R.drawable.excel);
        }

        return row;
      }

    }

Раздел 2 : MainActivity

Наша основная деятельность. Она будет подклассом класса ListActivity.

package com.tutorials.customlistviewarrayadapter;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends ListActivity {

  String[] languages={"android","java","c#","mysql","access","excel"};

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

        CustomAdapter adapter=new CustomAdapter(this, languages);
        setListAdapter(adapter);
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);

        String item=(String) getListAdapter().getItem(position);

        Toast.makeText(getApplicationContext(),"Welcome to "+ item+" Programming language", Toast.LENGTH_SHORT).show();
    }
}

Раздел 3 : Макеты

ActivityMain.xml

Макет нашей основной активности.

    <RelativeLayout

        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" >

        <ImageView
            android_id="@+id/imageView1"
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_layout_alignParentLeft="true"
            android_layout_alignParentTop="true"
            android_layout_marginLeft="16dp"
            android_layout_marginTop="17dp"
            android_src="@drawable/ic_launcher" />

        <TextView
            android_id="@+id/textView1"
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_layout_alignBottom="@+id/imageView1"
            android_layout_alignParentRight="true"
            android_layout_alignTop="@+id/imageView1"
            android_layout_marginLeft="16dp"
            android_layout_toRightOf="@+id/imageView1"
            android_text="TextView" />

    </RelativeLayout>

Добрый день.