ListViewのアイテム単位に制御が可能になるよう実装してみる。
ActivityでもFragmentでも両方同じ要領で実装出来そう。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// ListViewを取得する。
ListView listView = (ListView) frame.findViewById(R.id.list_view);
// ContextMenuを利用出来るよう設定
registerForContextMenu(listView);
・・・
}
/*
* ContextMenu生成時に呼び出されるメソッド.
* 今回の設定ではListViewのindex=0,1はContextMenuが表示されないよう制御.
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, view, menuInfo);
// ListViewにキャストする。
ListView listView = (ListView) view;
// AdapterContextMenuInfoにキャストする。
AdapterContextMenuInfo contextMenuInfo= (AdapterContextMenuInfo) menuInfo;
if (contextMenuInfo.position == 0) {
// ListViewのindex=0(1番目のMenuを設定する)
} else if (contextMenuInfo.position == 1) {
// ListViewのindex=1(2番目のMenuを設定する)
} else {
// その他のindexのMenuを設定する。
menu.setHeaderTitle("ContextMenuのタイトル");
menu.add("menu1");
menu.add("menu2");
menu.add("menu3");
}
}
/*
* メニューがクリックされた際に呼び出されるメソッド.
*/
@Override
public boolean onContextItemSelected(MenuItem item) {
// menu名を取得
String menuName = item.getTitle().toString();
// ContextMenuInfoを取得
AdapterContextMenuInfo detailInfo = (AdapterContextMenuInfo) item.getMenuInfo();
if ("menu1".equals(menuName)) {
Log.d("sample", detailInfo .position + "の" + menuName + "処理を実行");
} else if ("menu2".equals(menuName)) {
Log.d("sample", detailInfo .position + "の" + menuName + "処理を実行");
} else if ("menu3".equals(menuName)) {
Log.d("sample", detailInfo .position + "の" + menuName + "処理を実行");
}
return true;
}
こんな感じで実現出来た。正しい使い方かは不明・・・。おわり。
0 件のコメント:
コメントを投稿