質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

2回答

1821閲覧

メニューは表示されるが押すとエクセプションが発生する

SmartBuzz

総合スコア81

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2016/11/28 08:18

今回、タブページのリストビューを長押しした際に、コンテキストメニューが表示され、押すと別ページに遷移するという物を作ろうとしています。
現状フローティングボタンを押すと、その遷移がされるように確認していますが、コンテキストメニューでは表示する項目(今回だと「編集する」「削除する」は表示されますが、押すとエクセプションが発生します。

また、デバック実行をすると「onContextItemSelected」に来る前にエクセプションが発生して落ちてしまっています。

エクセプションメッセージは一番したに記載しました。

コンテキストメニューにアイテムを設定するところが悪いのでしょうか…?
教えてください。

宜しくお願い致します。

Java

1public class MylistCollectionFragment extends Fragment implements View.OnClickListener,AdapterView.OnItemClickListener { 2 3 private Context mContext; 4 5 private LinearLayout mRoot; 6 private ListView listView; 7 8 private List<MylistCollection> collectionList; 9 10 static final int MENU_ITEM_ID_EDIT = 1; 11 static final int MENU_ITEM_ID_DELETE = 2; 12 13 public static final int DATA_ENTRY = 1; 14 public static final int DATA_EDIT =0; 15 public static final String DATA_MYLISTFORM = "SEMD_MYLISTFORM"; 16 public static final String MYLISTCOLLECTIONFRAGMENT_ID ="MYLISTCOLLECTIONFRAGMENT"; 17 18 public MylistCollectionFragment(){} 19 20 @Override 21 public void onAttach(Context context){ 22 super.onAttach(context); 23 mContext = context; 24 } 25 @Override 26 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceSate){ 27 return inflater.inflate(R.layout.fragment_mylistcollection,container,false); 28 } 29 30 @Override 31 public void onResume(){ 32 super.onResume(); 33 updateData(getActivity()); 34 } 35 36 @Override 37 public void onViewCreated(View view, Bundle savedInstanceState){ 38 super.onViewCreated(view, savedInstanceState); 39 40 mRoot = (LinearLayout)view.findViewById(R.id.root); 41 42 listView = (ListView) view.findViewById(R.id.list_collection); 43 listView.setOnItemClickListener(this); 44 listView.setOnCreateContextMenuListener(this); 45 46 FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab); 47 fab.setOnClickListener(this); 48 49 updateData(getActivity()); 50 } 51 52 private void updateData(final Activity activity){ 53~~~字数オーバーの為割愛~~~~ 54 } 55 56 @Override 57 public void onClick(View v){ 58 switch (v.getId()){ 59 case R.id.fab: onFabClick(getActivity()); break; 60 } 61 } 62 63 @Override 64 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 65 ListView listView = (ListView)parent; 66 MyCollectionListAdapter adapter = (MyCollectionListAdapter) listView.getAdapter(); 67 MylistCollection collection = (MylistCollection) adapter.getItem(position); 68 FlurryLogger.logEvent(getClass().getSimpleName() + " onClickItem" + collection.getName()); 69 TestListActivity.start(getActivity(), collection); 70 } 71 72 73 @Override 74 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 75 AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo; 76 ListView listView = (ListView)v; 77 MyCollectionListAdapter adapter = (MyCollectionListAdapter)listView.getAdapter(); 78 MylistCollection mycollection = (MylistCollection) adapter.getItem(info.position); 79 FlurryLogger.logEvent(getClass().getSimpleName() + " onContextMenu" + mycollection.getName()); 80 81 // タイトル 82 ContextMenuHeader contextMenuHeader = new ContextMenuHeader(getContext()); 83 registerForContextMenu(contextMenuHeader); 84 menu.setHeaderView(contextMenuHeader); 85 86 if(!Locale.JAPAN.equals(Locale.getDefault())){ 87 contextMenuHeader.setTitle(mycollection.getEnglish() + "\n" + mycollection.getName()); 88 }else{ 89 contextMenuHeader.setTitle(mycollection.getName()); 90 } 91 contextMenuHeader.setAuthor(mycollection.getType()); 92 contextMenuHeader.setPublisher(mycollection.getMemo()); 93 94 //メニューボタン 95 menu.add(0, MENU_ITEM_ID_EDIT, 0, R.string.edit); 96 menu.add(0, MENU_ITEM_ID_DELETE, 0, R.string.deleate); 97 98 99 } 100 101 @Override 102 public boolean onContextItemSelected(MenuItem item) { 103 AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); 104 ListView listView = (ListView)getView().findViewById(R.id.list_collection); 105 MyCollectionListAdapter adapter = (MyCollectionListAdapter)listView.getAdapter(); 106 MylistCollection mycollection = (MylistCollection)adapter.getItem(menuInfo.position); 107 Uri uri; 108 109 switch(item.getItemId()) { 110 case MENU_ITEM_ID_EDIT: 111 FlurryLogger.logEvent(getClass().getSimpleName() + " onClickContextItemSelected Wikipedia"); 112 onFabClick(getActivity()); 113 return true; 114 115 case MENU_ITEM_ID_DELETE: 116 FlurryLogger.logEvent(getClass().getSimpleName() + " onClickContextItemSelected Official"); 117 onFabClick(getActivity()); 118 return true; 119 } 120 121 return super.onContextItemSelected(item); 122 } 123 124 /** 125 * 登録ボタン 126 * @param /Activity activity 127 */ 128 private void onFabClick(final Activity activity){ 129 FlurryLogger.logEvent(getClass().getSimpleName() + " onClick MylistCollectionForm"); 130 131 Intent intent = new Intent(getContext(), MylistCollectionActivity.class); 132 intent.putExtra(DATA_MYLISTFORM, DATA_ENTRY); 133 startActivity(intent); 134 135 } 136}
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat= }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1809) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1523) at android.app.Activity.startActivityForResult(Activity.java:4225) at android.app.Activity.startActivityForResult(Activity.java:4183) at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:849) at android.support.v4.app.FragmentActivity$HostCallbacks.onStartActivityFromFragment(FragmentActivity.java:907) at android.support.v4.app.Fragment.startActivity(Fragment.java:916) at com.tester.testcollection.fragment.CollectionListFragment.onContextItemSelected(CollectionListFragment.java:176) at android.support.v4.app.Fragment.performContextItemSelected(Fragment.java:2085) at android.support.v4.app.FragmentManagerImpl.dispatchContextItemSelected(FragmentManager.java:2173) at android.support.v4.app.FragmentController.dispatchContextItemSelected(FragmentController.java:308) at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:370) at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:147) at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100) at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100) at com.android.internal.policy.PhoneWindow$PhoneWindowMenuCallback.onMenuItemSelected(PhoneWindow.java:3663) at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:761) at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:904) at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:894) at com.android.internal.view.menu.MenuPopup.onItemClick(MenuPopup.java:128)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

ContextMenuを別で使っていて、ID1,2,3は既に使われていた。
それが原因だった。
4,5を指定すると解決した。

投稿2016/11/30 01:43

SmartBuzz

総合スコア81

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

TestListActivity#startがとても怪しいです。
このメソッドの前後でログ出力を行い、メソッドが完了しているかを確認してください。
また、このメソッドのコードとなにをするメソッドかを説明してください。

投稿2016/11/28 13:00

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SmartBuzz

2016/11/29 02:30 編集

この先はcollectionを渡して、情報を表示する画面に遷移します。 呼び出しているメソッドコードは public static void start(Activity activity, MylistCollection collection){ Intent starter = new Intent(activity, MountainListActivity.class); starter.putExtra(EXTRA_COLLECTION, collection); ActivityCompat.startActivity(activity, starter, ActivityOptionsCompat.makeSceneTransitionAnimation(activity).toBundle()); } で、画面を立ち上げるためのメソッドです。 ただ、今回は既存の処理を取りあえず型を合わせて呼び出しているだけで、正しく動作確認はしていません。 まずは、コンテキストメニューでの編集と削除が正確に動かないと次に進めなくて…。 ※質問が文字数オーバーなので、コメントにコードを記載します。
yona

2016/11/29 03:07

onFabClickの冒頭にあるログ出力は行われていますか?
SmartBuzz

2016/11/29 05:09 編集

はい、ログ出力は行われてます。 その先の遷移も問題なくできています。 onCreateContexMenuもエクセプション発生することなく、最後まで通っていて、onContextItemSelectedのところに来ていない感じです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問