http://codezine.jp/article/detail/4842?p=2
前回までで名刺一覧の表示ができましたので、今回はそれぞれの名刺をクリックするとその詳細を表示させてみます。
別のアクティビティやアプリを起動するには、クリック部分にリスナーを仕込んでおき、クリックを感知して該当のアクティビティを起動する、というのが常套手段のようです。
まずリスナーをセット
/src/com.example.bizcard/ListActivity.java
public class ListActivity extends Activity implements OnItemClickListener{
public void onCreate(Bundle savedInstanceState) {
//表示
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
arrayAdapter = new ArrayAdapter<BizCard>(this, android.R.layout.simple_list_item_1);
listView = (ListView) findViewById(R.id.list);
listView.setAdapter(arrayAdapter);
//クリックリスナーをセット
listView.setOnItemClickListener(this);
}
}
OnItemClickListenerを直接実装しました。ということでOnItemClickListener.onItemClick()を実装します。
//クリックリスナー
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 選択された要素を取得する
BizCard bizCard = (BizCard)parent.getItemAtPosition( position);
// 参照画面へ遷移する明示的インテントを生成
Intent showIntent = new Intent( this, ShowActivity.class);
// 選択されたオブジェクトをインテントに詰める
showIntent.putExtra( BizCard.TABLE_NAME, bizCard);
// アクティビティを開始する
startActivity( showIntent);
}
正直引数がなんなのかさっぱりわからないんですが。AdapterView<?>って何だ?
検索しようがないので調べるにも調べられん。
ていうかそれ以前にAdapterViewがよくわからん。
まあとりあえずAdapterView.getItemAtPosition( position)でクリックしたビューを取得できるらしいです。
第二引数viewとか第四引数idとかは何なんだ?
該当のBizCardオブジェクトを取得できたらそれをインテントに詰め込んでShowActivityを実行します。
.classってのはまた何だ。
http://www.itarchitect.jp/technology_and_programming/-/18161-5.html
> Classオブジェクトは、「Foo.class」のように「《クラス名》.class」というかたちのクラス・リテラルによって記述することができる。
> このクラス・リテラルの型は、パラメータ付きのClass型になっている。
> 例えば、「Foo.class」というクラス・リテラルであれば、Class<Foo>という型を持つ。
なるほど、まったくわからん。
クラスリテラルってなんだよ。
中身は気にしないので単に殻としてShowActivityという型だけ欲しいときに.classを使えばいいということか?
よくわかりませんがとりあえず詳細画面が表示されるようになりました。
といっても詳細画面は現在引数を使わず完全固定なのですが。
さて、今回はActivityに直接OnItemClickListenerをinplementしています。
普通はこういう作りにせず、内部クラスを作ってそちらにリスナーをセットするという形にすることが定石らしいです。
ちょっとやってみます。
こういった定石とかってどうやって知ればいいんだろう?
public void onCreate(Bundle savedInstanceState) {
//クリックリスナーをセット
listView.setOnItemClickListener(new BizCardClickListener());
}
class BizCardClickListener implements OnItemClickListener {
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
BizCard bizCard = (BizCard)parent.getItemAtPosition( position);
Intent showIntent = new Intent( ListActivity.this, ShowActivity.class);
showIntent.putExtra( BizCard.TABLE_NAME, bizCard);
startActivity( showIntent);
}
}
まあ単に内部クラスを作っただけなので実質的には何一つ変わっていません。中身のコードの意味がわからないのもそのままということです。
Androidの記事
PR
トラックバック
トラックバックURL: