Как показать контекстное меню на раздутом виде? - PullRequest
3 голосов
/ 22 марта 2011

Я хочу отобразить контекстное меню для раздутого представления.Вот пример кода:

для grid_layout.xml:

<?xml version="1.0" encoding="utf-8"?>    
    <ImageView
            xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="centerInside"
        android:antialias="true" />

Теперь я использую его в своем классе activiy как:

  @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {       
            menu.setHeaderTitle("Select action");       
            menu.add(0, 1, 0, "Action1");
            menu.add(0, 2, 0, "Action2");

            super.onCreateContextMenu(menu, v, menuInfo);
    }

    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    ImageView imageView = (ImageView) inflater.inflate(R.layout.grid_layout, null);
    imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               registerForContextMenu(v);
                       openContextMenu(v);
            }

        });

Этот код работает безлюбая ошибка, но контекстное меню не появляется, когда я щелкаю imageView.Что-то не так с этим кодом?

Ответы [ 3 ]

4 голосов
/ 24 марта 2011

Я нашел обходной путь для этой ситуации и решил свою проблему.Как я уже сказал, тот же код работает нормально и отображает ContextMenu, если я определю ImageView в XML, который я установил в методе setContentView ().Я просто использовал объект этого imageView для регистрации contextMenu и отображал ContextMenu при щелчке надуваемого элемента.Вот пример кода:

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {       
            menu.setHeaderTitle("Select action");       
            menu.add(0, 1, 0, "Action1");
            menu.add(0, 2, 0, "Action2");

            super.onCreateContextMenu(menu, v, menuInfo);
    }

    ImageView imageViewInContext = (ImageView) findViewById(R.id.imageview_in_main_xml);
    registerForContextMenu(imageViewInContext);

    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    ImageView imageView = (ImageView) inflater.inflate(R.layout.grid_layout, null);
    imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {                   
                 openContextMenu(imageViewInContext);
            }

        });

Надеюсь, это кому-нибудь поможет!

1 голос
/ 22 марта 2011

Добавьте ваш код:

imageView.setFocusable(true);
imageView.setClickable(true);

, после этого Imageview получит clickEvent.

0 голосов
/ 22 марта 2011

Поскольку вы создаете анонимный внутренний класс (выполняя new View.OnClickListener), вы больше не работаете в потоке пользовательского интерфейса (ваш класс Activity), поэтому контекстное меню не загружается, когда вы хотите registerForContextMenu и * 1003.*.Вы можете либо использовать Handler для отправки сообщения в поток пользовательского интерфейса (ваш класс Activity) для выполнения этих действий, либо попытаться сослаться на ваш класс Activity в вашем внутреннем классе.Как то так:

activityClassName.this.registerForContextMenu(v);
activityClassName.this.openContextMenu(v);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...