AndroidのBaseAdapter
BaseAdapterは、Androidアプリケーションでよく使用されるベースデータアダプタについて、インタフェースクラスのAdapterから継承されたListView、Spinner、Gallery、GridViewなどのUI表示コンポーネントにデータのセットを転送するのが主な用途です.(静寂から遠ざかるhttp://www.cnblogs.com/mandroid/archive/2011/04/05/2005525.html)
1、Adapter類の紹介
1)、Adapter関連クラス構造を下図に示す.
Adapterサブクラスをカスタマイズするには、上記のいくつかの方法を実装する必要があります.最も重要なのはgetView()メソッドです.これは、ListViewの各行のTextView、Galleryの各ImageViewなど、データを取得したViewコンポーネントを返すことです.
2)、AdapterはAndroidアプリケーションにおいて非常に重要な役割を果たし、アプリケーションも非常に広く、データソースとUIコンポーネントの架け橋と見なすことができ、Adapter、データとUIの関係は下図で表すことができる.
3)、常用サブクラス
2、BaseAdapter概要BaseAdapterはListAdapterとSpinnerAdapterの2つのインタフェースを実現しており、もちろんListViewやSpinnerなどのUIコンポーネントに直接データを提供することもできる.
関連クラス構造は次の図のようになります.
BaseAdapterを継承した後、getCount、getItem、getItemId、getViewの4つのメソッドを書き換える必要があります.
最も重要なメソッドはgetViewメソッドで、呼び出しプロセスは次のとおりです.
まずgetCountメソッドを呼び出し、Itemの数を取得した後、Itemを描画するたびにgetViewメソッドを呼び出します.
この方法で事前に定義したXMLを表示効果とし,ItemとしてViewオブジェクトを返して表示する.
これもアダプタの主な変換機能を完了しました.getItemメソッドとgetItemIdメソッドは、ListViewレスポンスが呼び出されます.
呼び出し、getItemIdメソッドの機能実装が完了していない場合、ListViewのgetItemIdAtPositionを呼び出す
メソッドは、対応するアダプタを呼び出すgetItemIdメソッドであるため、所望の結果が得られません.
ListViewはフォーカスの問題を取得できません:
ListViewでは、Itemクリックが反応せず、フォーカスが得られないという問題が予想されがちです.原因は、あなた自身にあることが多いからです.
定義されたItemにはImageButton,Button,CheckBoxなどのサブコントロール(ButtonまたはCheckableともいえる)が存在する
サブクラスコントロール)では、これらのサブコントロールがフォーカスを取得するため、itemをクリックするとサブコントロールが変化し、item自体のクリックに応答しないことが多い.
この場合、descendantFocusabilityを使用して問題を解決する必要があります.APIの説明は以下の通りである.
android:descendantFocusability
Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus.
Must be one of the following constant values.
このプロパティは、viewにフォーカスを取得するときにviewGroupとそのサブコントロールの関係を定義します.
属性の値は3種類あります.
beforeDescendants:viewgroupはサブクラスコントロールを優先してフォーカスを取得します
afterDescendants:viewgroupは、サブクラスコントロールがフォーカスを取得する必要がない場合にのみフォーカスを取得します.
blocksDescendants:viewgroupはサブクラスコントロールを上書きして直接フォーカスを取得します
一般的には、Itemレイアウトのルートレイアウトにandroid:descendantFocusability=「blocksDescendants」のプロパティを付けると3つ目になります.
3、例
例1:Galleryは画像のセットを表示します
実行結果:
説明:上の行の画像はGalleryギャラリーで、1つのGallery画像をクリックするたびに、同時に下に大きな図の形式で表示されます.
レイアウトファイル:
MainActivityクラス:
1、Adapter類の紹介
1)、Adapter関連クラス構造を下図に示す.
Adapterサブクラスをカスタマイズするには、上記のいくつかの方法を実装する必要があります.最も重要なのはgetView()メソッドです.これは、ListViewの各行のTextView、Galleryの各ImageViewなど、データを取得したViewコンポーネントを返すことです.
2)、AdapterはAndroidアプリケーションにおいて非常に重要な役割を果たし、アプリケーションも非常に広く、データソースとUIコンポーネントの架け橋と見なすことができ、Adapter、データとUIの関係は下図で表すことができる.
3)、常用サブクラス
2、BaseAdapter概要BaseAdapterはListAdapterとSpinnerAdapterの2つのインタフェースを実現しており、もちろんListViewやSpinnerなどのUIコンポーネントに直接データを提供することもできる.
関連クラス構造は次の図のようになります.
BaseAdapterを継承した後、getCount、getItem、getItemId、getViewの4つのメソッドを書き換える必要があります.
最も重要なメソッドはgetViewメソッドで、呼び出しプロセスは次のとおりです.
まずgetCountメソッドを呼び出し、Itemの数を取得した後、Itemを描画するたびにgetViewメソッドを呼び出します.
この方法で事前に定義したXMLを表示効果とし,ItemとしてViewオブジェクトを返して表示する.
これもアダプタの主な変換機能を完了しました.getItemメソッドとgetItemIdメソッドは、ListViewレスポンスが呼び出されます.
呼び出し、getItemIdメソッドの機能実装が完了していない場合、ListViewのgetItemIdAtPositionを呼び出す
メソッドは、対応するアダプタを呼び出すgetItemIdメソッドであるため、所望の結果が得られません.
ListViewはフォーカスの問題を取得できません:
ListViewでは、Itemクリックが反応せず、フォーカスが得られないという問題が予想されがちです.原因は、あなた自身にあることが多いからです.
定義されたItemにはImageButton,Button,CheckBoxなどのサブコントロール(ButtonまたはCheckableともいえる)が存在する
サブクラスコントロール)では、これらのサブコントロールがフォーカスを取得するため、itemをクリックするとサブコントロールが変化し、item自体のクリックに応答しないことが多い.
この場合、descendantFocusabilityを使用して問題を解決する必要があります.APIの説明は以下の通りである.
android:descendantFocusability
Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus.
Must be one of the following constant values.
このプロパティは、viewにフォーカスを取得するときにviewGroupとそのサブコントロールの関係を定義します.
属性の値は3種類あります.
beforeDescendants:viewgroupはサブクラスコントロールを優先してフォーカスを取得します
afterDescendants:viewgroupは、サブクラスコントロールがフォーカスを取得する必要がない場合にのみフォーカスを取得します.
blocksDescendants:viewgroupはサブクラスコントロールを上書きして直接フォーカスを取得します
一般的には、Itemレイアウトのルートレイアウトにandroid:descendantFocusability=「blocksDescendants」のプロパティを付けると3つ目になります.
3、例
例1:Galleryは画像のセットを表示します
実行結果:
説明:上の行の画像はGalleryギャラリーで、1つのGallery画像をクリックするたびに、同時に下に大きな図の形式で表示されます.
レイアウトファイル:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Gallery
android:id="@+id/gallery1"
android:layout_width="match_parent"
android:spacing="5px"
android:layout_height="wrap_content"
></Gallery>
<ImageView
android:id="@+id/iv"
android:layout_gravity="center_vertical"
android:layout_marginTop="20px"
android:layout_width="320px"
android:layout_height="320px"
></ImageView>
</LinearLayout>
MainActivityクラス:
package com.magc.adapter;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.AdapterView.OnItemClickListener;
public class MainActivity extends Activity {
private Gallery gallery;
private ImageView imgview;
private int[] imgs = {R.drawable.a6,R.drawable.a1,R.drawable.a2,R.drawable.a3,R.drawable.a4,R.drawable.a5};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imgview = (ImageView)findViewById(R.id.iv);
gallery = (Gallery)findViewById(R.id.gallery1);
MyImgAdapter adapter = new MyImgAdapter(this);
gallery.setAdapter(adapter);
gallery.setOnItemClickListener(new OnItemClickListener() {
// , ResourceID ImageView ,
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position,
long arg3) {
imgview.setImageResource(imgs[position]);
}
});
}
class MyImgAdapter extends BaseAdapter {
// Adapter MainActivity , MainActivity , imgs
private Context context;// Context
public MyImgAdapter(Context context) {
super();
this.context = context;
}
@Override
public int getCount() {
return imgs.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// ( ID) ImageView ,
ImageView iv = new ImageView(context);// Context ,
iv.setImageResource(imgs[position]);
Log.i("magc", String.valueOf(imgs[position]));
iv.setLayoutParams(new Gallery.LayoutParams(80, 80));// Gallery 80*80。
iv.setScaleType(ImageView.ScaleType.FIT_XY);
return iv;
}
}
}