今回、タブページのリストビューを長押しした際に、コンテキストメニューが表示され、押すと別ページに遷移するという物を作ろうとしています。
現状フローティングボタンを押すと、その遷移がされるように確認していますが、コンテキストメニューでは表示する項目(今回だと「編集する」「削除する」は表示されますが、押すとエクセプションが発生します。
また、デバック実行をすると「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)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。