更新:アプリを使用しているときに、いくつかのランダムな時間に、特に画面の下部に向かってアイテムをクリックするとアプリがクラッシュするようです。それがなぜ起こったのかについてのアイデアは?エスプレッソ長いメニュー項目とポップアップメニューをクリック
私のアプリにはリストビューがあります。リストビュー項目を長押しすると、長押しした項目に固定されたポップアップメニューが表示され、メニュー項目を削除または編集するオプションが表示されます。アプリを使用するだけで、すべて正常に動作します。リスト内の項目を長くクリックすると、関連する基本データが削除され、削除した項目がなくてもリストビューが最新表示されます。
私は何をしようとしています: エスプレッソは私のリストビューとロングクリックが好きではありません。私は単にポップアップメニューが表示されることをテストしようとしていますが、私はエスプレッソをlongclickにうまく乗せられません。問題はポップアップメニューと関係があると思っています。初心者にとっては、エスプレッソを私に怒らずにロングクライックにしようとしているだけです。いったんエスプレッソの長いクライストが成功すると、ポップアップが表示されるかどうかをチェックする方法がわかります。
私がこれまでに試したこと:アニメーションをオフにすると、エスプレッソのフレーク性が低下するのを助けるはずです。私は可能なすべてのアニメーションをオフにして、問題は依然として続きます。これはエスプレッソテストです :私も自分の携帯電話上のテストランを見て、それが正しいメニュー項目をlongclickingされていることがわかりますが、longclickが完了すると、ポップアップメニューが表示されます場合は、テストが
コードを失敗することができます失敗した行。私はclick()
を除いて同じコード行を使用していました。アプリはそれが想定していたことを行い、エスプレッソは満足しています。 mCourseCountは、単にリスト内の最後の項目のインデックスです。それは問題ではありません。私はいくつかの他のテストで同じインデックスを更新し、すべて正常に動作します。
onData(anything()).inAdapterView(withId(R.id.listview_class))
.atPosition(mCourseCount).perform(longClick());
は障害が発生すると、私はよっぽど設定しているため、スタックトレースのこの最後のビットが混乱して
Caused by: java.lang.IllegalStateException: MenuPopupHelper cannot be used
without an anchor at
com.android.internal.view.menu.MenuPopupHelper.show(MenuPopupHelper.java:101)
at android.widget.PopupMenu.show(PopupMenu.java:108)at
com.cmsc355.classcompass.classcompass.CourseMenuFragment$2.
onItemLongClick(CourseMenuFragment.java:91)
に
android.support.test.espresso.PerformException: Error performing 'long
click' on view ' displaying data matching: ANYTHING within adapter vieW
matching: with id: com.cmsc355.classcompass.classcompass:id/listview_class'
以降スタックトレースにカップル面白いラインが存在します以下のようにアンカーをポップアップメニューに追加します(これは91行目のCourseMenuFragmentからです)。
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, final View view, final int position, long id) {
PopupMenu popupEdit = new PopupMenu(getActivity(), listView.getChildAt(position));
popupEdit.getMenuInflater().inflate(R.menu.course_longclick_popup, popupEdit.getMenu());
popupEdit.show();
popupEdit.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.edit_course) {
} else if (item.getItemId() == R.id.delete_course) {
throwCourseDeleteAlert(position);
listView.setAdapter(mCourseNameAdapter);
}
return true;
}
});
return true;
}
});
ポップアップが初めてインスタンス化される行では、listView.getChildAt(position)
がポップアップメニューのアンカーを定義します。おそらくこれに問題がありますか?しかし、言及したように、すべては私自身とちょうど対話するときに期待どおり完全に正常に動作します。
ガイダンスをいただければ幸いです。もう解明が必要な場合は教えてください。
これが役に立ちます:http://stackoverflow.com/questions/24634136/menu-popup-helper-cannot-be-used-without-anchor –