メインコンテンツまでスキップ

Android Activity – チュートリアル、種類、基本例

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

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

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

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

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

---

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

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

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

---

しかし、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

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

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

---

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

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

---

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

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

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

しかし、ここからは、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. 完了」をクリックします。

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

---

このアクティビティは、自動的に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つのレイアウトが生成されます。

---

この例では、基本的なアクティビティを使用しています。

このアクティビティは、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プロジェクトを作成するメリット

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

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

---

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

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

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

---

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から派生したクラスを紹介します。

---

画面レイアウト

ListActivityのデフォルトのレイアウトは、1つの全画面リストを画面の中央に配置したものです。しかし、必要に応じて、onCreate()setContentView()で独自のビューレイアウトを設定することで、画面レイアウトをカスタマイズすることができます。これを行うには、独自のビューには、id code>"@android:id/list"</code (コード内にある場合は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 に属しています。アクティビティ](%E3%81%A7%E3%81%82%E3%82%8A%E3%80%81%E9%85%8D%E5%88%97%E3%82%84Cursor%E3%81%AA%E3%81%A9%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AB%E3%83%90%E3%82%A4%E3%83%B3%E3%83%89%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%80%81%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%8C%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AB%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%8F%E3%83%B3%E3%83%89%E3%83%A9%E3%82%92%E5%85%AC%E9%96%8B%E3%81%97%E3%81%BE%E3%81%99)https://camposha.info/android/activity)であり、配列やCursorなどのデータソースにバインドすることでアイテムのリストを表示し、ユーザーがアイテムを選択したときにイベントハンドラを公開します%E3%81%A7%E3%81%82%E3%82%8A%E3%80%81%E9%85%8D%E5%88%97%E3%82%84Cursor%E3%81%AA%E3%81%A9%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AB%E3%83%90%E3%82%A4%E3%83%B3%E3%83%89%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%80%81%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%8C%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AB%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%8F%E3%83%B3%E3%83%89%E3%83%A9%E3%82%92%E5%85%AC%E9%96%8B%E3%81%97%E3%81%BE%E3%81%99)。

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

ダウンロード

---

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);
}
}

ダウンロード

---

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>

ダウンロード

---

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;
}

}

**ダウンロード

---

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>

ごきげんよう。