Androidの公式ドキュメントによると、「アクティビティ」とは、ユーザーが行うことのできる単一の集中的な活動のことです。

この言葉は、基本的に行動を実行したり、何かと相互作用することを意味する動詞「act」に由来しています。

ビジュアルコンポーネントがなくても「アクティビティ」は作成できますが、ほとんどのアクティビティは、ユーザーが操作できるビューやウィジェットをホストするために作成されます。

したがって、アクティビティは、ユーザーが操作する画面全体を漠然と指すことができます。

このように考えると、アクティビティにできることがいくつかあります。

No. アクション 説明
1. Open new activity これは、現在の activity またはスクリーンを置き換えます。
2. 現在の activity を閉じて、もう見えないようにする。Androidシステムは完全には殺さず、バックグランドに置いて、再び戻ってこないようにします。
3. 3. 端末を回転させる このアプリでビデオを見たり、ゲームをしたりしているときに、別のレイアウトで見たいとします。このプロセスでは、レイアウトのニーズに対応するために、「アクティビティ」が再現されます。

上記のような処理を行うと、アンドロイドシステムは様々なライフサイクルコールバックを発生させます。これらは基本的に、「アクティビティ」のライフサイクルのさまざまな段階で、イベントドリブンな方法で発生するメソッドです。例えば、作成、一時停止、再開、起動、再起動、停止などです。

Activity のプレゼンテーションメカニズム

アンドロイドでは、「アクティビティ」を様々な方法で表現することができます。

No. メカニズム 説明
1. フルスクリーンウィンドウ : 1. フルスクリーンウィンドウ:最も一般的な「アクティビティ」の表示方法で、画面全体を使って表示します。
2. フローティング・ウィンドウ : 2. フローティング・ウィンドウ : テーマで windowIsFloating 属性を設定することで、アクティビティ をフローティング・ウィンドウとして設定することができます。
3. Embedding : アクティビティは ActivityGroup を使って別の アクティビティ の中に埋め込むこともできます。

しかし、APIレベル13でFragmentsが導入されたことにより、ActivityGroupは廃止されたので、埋め込みはもはや魅力的ではありません。どちらかというと、フラグメントは基本的にサブアクティビティであり、独自のライフサイクルを持っています。

Activity クラスの定義

プログラムによる activity の説明も見てみましょう。

まず、このクラスは android.app パッケージに属しています。

package android.app;

Activity`は他のクラスと同じですが、独自の方法でユニークなクラスでもあります。また、パブリックなので、自分のパッケージの外にある他のパッケージの中でも見ることができ、使うことができます。

public class Activity..{}

クラスであるということは、他のクラスが持っている以下のようなオブジェクト指向の機能も持っています。

  1. 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{}
ActivityのChildrenとGrandChildren

これがアクティビティの直接のサブクラスと間接のサブクラスです。

直接的なサブクラスは以下の通りです。

No. アクティビティ 説明
1. FragmentActivity|サポートライブラリを使用してFragmentsやLoader APIを利用したいアクティビティが使用するスーパークラスです。
2. NativeActivity|純粋にネイティブコードで実装された便利なアクティビティを求める人のためのクラス。
3. 3. ListActivity|データソースにバインドされたアイテムのリストを表示することに特化したアクティビティ。
4. 4. ExpandableListActivity|データ ソースにバインドされたアイテムの拡張可能なリストを表示することに特化したアクティビティ。
5. 5. AliasActivity|アクティビティにエイリアスのようなメカニズムを提供する。 5. AliasActivity|アクティビティにエイリアスのようなメカニズムを提供する。
6. 6. AccountAuthenticatorActivity AbstractAccountAuthenticatorを実装するアクティビティを作成するためのスーパークラスです。
7. 7. ~ActivityGroup~ Fragmentsが導入された後のAPI 13で非推奨となりました。それ以前は、複数のアクティビティを組み込んだ画面を作成するための方法でした。

さて、これらはアクティビティの子です。

それでは、孫/間接サブクラスを見てみましょう。

No. 活動内容|主な親|説明
1. AppCompatActivity|FragmentActivity|AppCompatActivityは、アクションバー機能の利用を計画しているアクティビティのスーパークラスです。
2. ActionBarActivity~ AppCompatActivity Deprecated. 以前は、アクティビティにアクションバー機能を提供するために使用されていました。現在、その役割はAppCompatActivityに移っています。
3. ~TabActivity~|ActivityGroup|APIレベル13にさかのぼって廃止されました。それ以前は、タブ付きアクティビティを作成するために使用されていましたが、現在はフラグメンツでそれが可能です。
4. PreferenceActivity|ListActivity|ユーザーにプリファレンスの階層を表示しようとする場合に使用するスーパークラスです。
5. 5.LauncherActivity|ListActivity|与えられた意図に対して実行可能なすべてのアクティビティのリストを表示します。

能力 アクティビティクラスがその子供たちに提供するもの

アクティビティは、ユーザーが行うことができる単一の集中した事柄を表すと言われています。

アクティビティは、ユーザーが操作できるビューやウィジェットを使用してレンダリングすることができます。

しかし、ここからは、Activityクラスが子クラスに与える、より詳細で具体的な機能を、より低いレベルから探っていきましょう。

1. コンテキスト機能
  1. 様々なパーミッションをチェックする : 例えば、checkPermission(String permission, int pid, int uid)は、システム内で実行されている特定のプロセスとユーザーIDが渡されたパーミッションを持っているかどうかを判断します。checkUriPermission(Uri uri, int pid, int uid, int modeFlags)は、システム内で実行されている特定のプロセスとユーザーIDが渡されたUriなどにアクセスするパーミッションを持っているかどうかを判断します。
    1. アプリケーションサービスへの接続または作成 : これは、bindService(Intent service, ServiceConnection conn, int flags)メソッドコールによって行われます。
      3.他のContextを作成する : 例えば、createConfigurationContext(Configuration overrideConfiguration)は、現在のコンテキストのための新しいContextオブジェクトを作成しますが、リソースは渡された構成に合わせて調整されます。createPackageContext(String packageName, int flags)は、与えられたアプリケーション名のための新しいContextオブジェクトを返します。
    1. 関連するデータベースとファイルのリスト : databaseList()は、このContextのアプリケーションパッケージに関連するプライベートデータベースの文字列配列を提供し、fileList()`は、このContextのアプリケーションパッケージに関連するプライベートファイルの文字列配列を返す。
    1. 関連付けられたデータベースとファイルを削除する : deleteDatabase(String name)はこのContextのアプリケーションパッケージに関連付けられたSQLiteDatabaseを削除し、deleteFile(String name)はこのContextのアプリケーションパッケージに関連付けられたプライベートファイルを削除します。 6.**アプリケーションコンテクストの取得** : ContextのgetApplicationContext()は、現在のプロセスの単一のグローバルなApplicationオブジェクトを返します。 7.**アプリケーション情報の取得** : getApplicationInfo()を介して、現在のContextのパッケージの完全なアプリケーション情報を得ることができます。

クイックアクティビティの例

1. アクティビティ`を開始するには

アクティビティ "を開始するには、"Intent "オブジェクトが必要です。それでは、「アクティビティ」を開始するメソッドを作ってみましょう。このメソッドは、対象となる activity のクラス名と、コンテキストオブジェクトを受け取ります。

    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. 3. 「アクティビティ」がフォアグラウンドにあるかどうかを判断する方法

このサンプルメソッドでは、ある activity がフォアグラウンドにあるかどうかを判断します。判定結果はブール値で返されます。

    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以上で動作していること。
  1. このクラスを拡張する。
    1. アクティビティのテーマを 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 ActionBarの取得

AppCompatActivity`では、アクションバーへの参照を取得するためのメソッドが用意されています。

public ActionBar getSupportActionBar(){}

アクションバーがない場合は、nullが返されます。

AppCompatActivityでToolBarをActionBarとして使用する。

アクションバーの代わりに、android.support.v7.widget.Toolbarを使うことができます。ツールバーには、柔軟な使い方やカスタマイズができるというメリットがあります。

アクションバーは通常、アクティビティの不透明なウィンドウ装飾の一部です。そのため、フレームワークによって制御されます。

一方、ツールバーは、アプリケーションのレイアウトの中で使用することができます。そのため、柔軟性があります。

例えば、次のようなツールバーが定義されているとします。

...
<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 – Empty Activity Projectの作成

Android Studioで空のアクティビティを作成する方法

Android StudioでEmpty Activityテンプレートを使ってプロジェクトを作成する方法をご紹介します。Android Studioを使って、空のアクティビティを作成する方法を紹介します。

空のアクティビティは、アンドロイド開発のためのテンプレートです。1つのjavaファイルと1つのxmlレイアウトファイルを生成してくれるので、最も簡単に始めることができるテンプレートです。

以下、その手順をご紹介します。

  1. まず、android studioで空のプロジェクトを作成します。ファイル」→「新規プロジェクト」を選択します。
  2. アプリケーション名を入力し、会社名を選びます。
  3. 最小限のSDKを選択します。
  4. Empty activityを選択します。
  5. 完了」をクリックします。

これで、以下のようなプロジェクトが生成されます。

番号 番号|名前|タイプ|説明
activity_main.xml|XMLレイアウト|MainActivityビューにインフレーションされ、ここにビューやウィジェットを追加します。
2. 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>

インテントフィルターとして、1つのアクションとカテゴリーが指定されているのがわかります。カテゴリはMainActivityをランチャーアクティビティにしています。ランチャーアクティビティは、アンドロイドアプリが起動したときに最初に実行されます。

Android Studio – Basic Activity Projectの作成

How to Create a Project in android studio with Basic Activity template. (英語のみ)

Android Studio – Creating Basic Activity Project How to Create Project in android studio with Basic Activity template. これは初心者向けのチュートリアルで、基本的なテンプレートに基づいてアンドロイドのプロジェクトを作成する方法を説明しています。

以下、その手順をご紹介します。

  1. まず、android studioで新しいプロジェクトを作成します。File –> New Projectを選択してください。
  2. アプリケーション名を入力し、会社名を選択します。
  3. 最小限のSDKを選択します。
  4. Basic activityを選択します。
  5. 完了」をクリックします。

基本アクティビティでは、レイアウトにツールバーとフローティングアクションボタンがすでに追加されています。

通常、このオプションでは2つのレイアウトが生成されます。

いいえ。 番号|名前|タイプ|説明
Activity_main.xml|XMLレイアウト|MainActivityレイアウトにインフレーションされます。通常、ツールバーを備えたappbarlayoutを含み、フローティングアクションボタンも備えています。
2. content_main.xml|XMLレイアウト|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をランチャーアクティビティにしています。ランチャーアクティビティは、アンドロイドアプリが実行されたときに最初に実行されます。

Basic Activityプロジェクトを作成するメリット

このプロジェクトでは、オプションとして、基本アクティビティではなく、空のアクティビティを選択することができます。

しかし、基本アクティビティには以下のような利点があります。

No. アドバンテージ
1.アクションバーとしての機能を持ちながら、簡単にカスタマイズできるレディメイドのツールバーを提供します。
2. マテリアルデザインのアプリバーコンセプトを実装したアプリバーレイアウトを提供します。
3. 3.FloatinActionButtonを提供し、特に以下のような例でクイックアクションを開始するために容易に使用することができます。
4. 4. カスタムコンテンツビューやウィジェットを、ツールバーのようなテンプレート機能から切り離すことができます。

生成されたプロジェクト構造

AndroidStudio は、いくつかのファイルやディレクトリを介して、デフォルトの設定を持つプロジェクトを生成します。

ここでは、その中でも特に重要なものを紹介します。

番号 ファイル 主な責任
1. build/|アプリケーションのビルドからコンパイルされたリソースや、アンドロイドツールで生成されたクラスを含むディレクトリです。このようなツールとして、R.javaファイルがあります。R.java`ファイルは、通常、アプリケーションのリソースへの参照を保持しています。
2. libs/ プロジェクトで使用するライブラリを格納します。
3. 3. src/main/ アプリケーションのソースコードを格納します。
4. 4. src/main/java/ パッケージとして整理されたJavaクラスが格納されています。
5. 5. src/main/res/ 以下のプロジェクトリソースフォルダが格納されています。
6. 6. src/main/res/drawable/ 描画リソースが格納されています。
7. 7. src/main/res/layout/ レイアウトリソースが格納されている。
8. src/main/res/menu/ メニューリソースのXMLコードが格納されている。
9. 9. src/main/res/values/src/main/res/values/ には、バリューリソースのXMLコードが含まれています。これは、名前と値のペアのセットを定義するもので、文字列、スタイル、色などがあります。
10. アプリケーション名、パッケージ名、パーミッション、アクティビティ、インテントなど、アンドロイドシステムに必要な基本的な情報を定義しています。
11. このファイルには、アプリケーション名、パッケージ名、パーミッション、アクティビティ、インテントなど、アンドロイドシステムが必要とする基本的な情報が定義されています。

Androidアクティビティ – あるアクティビティから別のアクティビティへプリミティブを渡す

あるアクティビティから別のアクティビティにプリミティブデータ型を渡す方法を見てみましょう。渡すのは

  • 文字列
  • 整数
  • Boolean(Via CheckBox)

最初のアクティビティ

第2のアクティビティ

を2つ目のアクティビティに移動させて、2つ目のアクティビティで表示しています。

Gradleファイル

アプリレベルのbuild.gradleファイルで依存関係を追加していきます。

1. ビルド.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'
    }

`

レイアウトリソース

3つのxmlレイアウトがあります。

  1. アクティビティメイン.xml
    2.コンテンツメイン.xml
    3.アクティビティ_セカンド.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

  • ここにエディットテキストとチェックボックスを追加しましょう。

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

  • 2つ目のアクティビティのコードです。
  • このアクティビティは、メインのアクティビティからデータを受け取り、ここに表示します。

    <?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クラス

2つのクラス、2つのアクティビティがあります。

  1. MainActivity.java
  2. SecondActivity.java

1. MainActivityクラス

  • 私たちのMainActivityです。
  • このアクティビティから2つ目のアクティビティにデータを渡します。

    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. セカンドアクティビティクラス

  • 2つ目のアクティビティです。
  • メインのアクティビティからデータを受け取り、テキストビューやチェックボックスに表示します。

    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は、配列やCursorなどのデータソースにバインドすることで、アイテムのリストを表示するactivityです。また、ListActivityは、ユーザがアイテムを選択したときのイベントハンドラを公開しています。

これは、Activityクラスから派生したクラスです。ListActivityは、ListViewを使用する予定がある場合に使用することを意図しています。実際、ListViewオブジェクトをホストしており、さまざまなデータソース(通常は配列やクエリ結果を保持するCursor)にバインドすることができます。

ListActivity APIの定義

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

リストアクティビティのサブクラス

ListActivityから派生したクラスを紹介します。

No. クラス 説明
1.LauncherActivity|与えられた意図に対して実行可能なすべてのアクティビティのリストを表示するクラス。クリックされると起動します。
2. PreferenceActivity|ユーザーにプリファレンスの階層を表示するアクティビティのベースクラスです。

画面レイアウト

ListActivityのデフォルトのレイアウトは、1つの全画面リストを画面の中央に配置したものです。しかし、必要に応じて、onCreate()setContentView()で独自のビューレイアウトを設定することで、画面レイアウトをカスタマイズすることができます。これを行うには、独自のビューには、id "@android:id/list" (コード内にある場合はlist)を持つListViewオブジェクトが含まれていなければなりません。

オプションとして、カスタムビューには、リストビューが空になったときに表示される任意のタイプの別のビューオブジェクトを含めることができます。この "空のリスト "ノティファイアは、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>

Android ListActivityの代表的な例

このセクションでは、ListActivity の完全な例をいくつか紹介します。

1. ListActivityとOnItemClick

この最初の例では、単純な配列からデータを ListActivity に入力する方法を見てみます。次に、OnItemClick イベントの処理方法を見ていきます。

使用しているAPI

まず、この例で使用するいくつかのAPIを定義してみましょう。

(a). ListActivity(リストアクティビティ

このクラスは android.app に属しています。アクティビティ](https://camposha.info/android/activity)であり、配列やCursorなどのデータソースにバインドすることでアイテムのリストを表示し、ユーザーがアイテムを選択したときにイベントハンドラを公開します

(b). バンドル

Bundleは、String値から様々なParcelableタイプへのマッピングです。

バンドルについてはこちらをご覧ください。

(c). ビュー (英語)

ユーザーインターフェースコンポーネントの基本的な構成要素を表すクラスです。ビューは、画面上の長方形の領域を占有し、描画やイベント処理を行います。

ビューについてはこちらをご覧ください。

(c). ArrayAdapter.

ArrayAdapter は,任意のオブジェクトの配列をバックに持つ具象的な BaseAdapter です.デフォルトでは,このクラスは,提供されたリソース ID が単一の 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. ListActivityとArrayAdapterの例

ListActivityにCatNamesを入力し、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 ダウンロード
2. GitHub Browse
2. GitHub Original Creator: @disiol 3.

3. AsyncTaskを使ったListActivity

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にアイテムを表示する方法を見ています。また、ユーザーが1つのアイテムをクリックすると、新しいアクティビティを開きます。

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 ダウンロード
2. GitHub Browse
2. GitHub Original Creator: @paulonova

5. ListActivity – アセットに格納されたXMLからの入力

この例では、XmlPullParser を使用して、アプリケーションの Assets ディレクトリに格納されている XML ドキュメントを解析する方法を見てみましょう。
この例では、XmlPullParser を使用して、アプリケーションの Assets ディレクトリに保存されている XML ドキュメントを解析する方法を見ていきます。

XML ドキュメントのタイトル、リンク、画像を ListView にロードします。assetsフォルダからXMLをInputStreamに開きます。そして、XmlPullParser を使って XML を解析する ParseXML() メソッドを用意します。

ImagesAdapterクラスは,XMLからの画像とテキストをカスタムリストビューに変換します.このクラスは,ベースとなるアダプタクラスとして 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

これはモデルクラスで、ListViewアイテムを構成する1つのXML要素を表します。タイトル、リンク、そしてビットマップを持ちます。

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

Android ListActivity – Images,Text and OnItemClick ArrayAdapterを使ったアクティビティ

Android ListActivity Images Text.

これはアンドロイドのカスタムリストビューのチュートリアルです。リストビューに画像とテキストを表示する方法です。

セクション 1 : CustomAdapter クラス

これは,CustomAdapter クラスです.これは,android.widget.ArrayAdapter のサブクラスになります.ArrayAdapter についての詳細はこちらをご覧ください.

これは,我々のアダプタクラスです.

    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>

ごきげんよう。