EditText
ボックスとListView
. 私もOverride
onCreateContextMenu
これが好きです:
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
android.view.MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.comments_context, menu);
menu.setHeaderTitle("Available Actions");
Log.d("v: ", String.valueOf(v));
MenuItem Edit = menu.findItem(R.id.editComment);
MenuItem Delete = menu.findItem(R.id.deleteComment);
AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
int position = info.position;
ListView lv = (ListView) v;
int firstVisible = lv.getFirstVisiblePosition();
View rowView = lv.getChildAt(position - firstVisible);
ReviewUser = ((TextView) rowView.findViewById(R.id.labelReviewCommentUser)).getText()
.toString();
ReviewComment = ((TextView) rowView .findViewById(R.id.labelReviewComment)).getText().toString();
ここに問題があります。 カット/コピー/ペーストなどのためにボックスonCreateContext
を長押しすると、システムから呼び出すことができます。EditText
my を長押ししたときにも呼び出すことができますListView
。システムが から onCreateContextMenu を呼び出すと、最後の行の一番下にある 2 つの TextViews で null クラッシュが発生しますEditText
。
解決策は次のとおりonCreateConextMenu
です。作成時にビューを比較する必要があります。ただし、これを行う方法がわからず、どこにも解決策が見つかりません。ログに記録されたビュー v と、アクティビティ内の他のすべてのビューがあり、常に自分のListView
...を指しています。
次のようなコードを作成するにはどうすればよいですか。
if (view passed in is from ListView) {
MenuItem Edit = menu.findItem(R.id.editComment);
MenuItem Delete = menu.findItem(R.id.deleteComment);
// do other things
}
誰でも私を案内できますか?私はこれを1週間探していました...