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 件のコメント:
コメントを投稿