0

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を長押しすると、システムから呼び出すことができます。EditTextmy を長押ししたときにも呼び出すことができます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週間探していました...

4

1 に答える 1

0

起こっていることは実際にはバグである可能性があるため、最終的な解決策ではありませんがEditTextListViewヘッダーからメインの XML ファイルに移動するだけで問題を回避できました。

于 2013-02-04T22:28:31.623 に答える