Пользовательский макет Actionbarsherlock, интерактивный просмотр изображений

Я пытаюсь сделать свое изображение, определенное в моем пользовательском макете для Actionbarsherlock, кликабельным. Моя деятельность сначала устанавливает макет:

setContentView(R.layout.myLayout);

Actionbar_layout устанавливается в том же действии, например:

View cView = getLayoutInflater().inflate(R.layout.actionbar_layout,
            null);
    actionBar.setCustomView(cView);

Фактический actionbar_layout выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:orientation="horizontal" >

<ImageView
    android:id="@+id/actionBarLogo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:paddingBottom="50dp"
    android:paddingLeft="10dp"
    android:paddingRight="50dp"
    android:paddingTop="50dp"
    android:scaleType="centerCrop"
    android:src="@drawable/logo" />

</LinearLayout>

Добавление этого:

actionBarLogo.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            //code 
        }
    });

Приводит к исключению Nullpointer для этой строки:

actionBarLogo.setOnClickListener(new View.OnClickListener()

Пользовательский макет работает нормально, мне просто нужно, чтобы изображение было кликабельным. Любые идеи, как это исправить? Как моя активность может получить ссылку на мой идентификатор actionBarLogo, определенный в actionbar_layout.xml?


person Jelle    schedule 31.01.2013    source источник


Ответы (3)


Попробуйте что-то вроде этого:

//your code
View cView = getLayoutInflater().inflate(R.layout.actionbar_layout,
        null);
actionBar.setCustomView(cView);

ImageView actionBarLogo = (ImageView) cView.findViewById(R.id.actionBarLogo);

actionBarLogo.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        //code 
    }
});

Он должен работать.

person Michał Z.    schedule 31.01.2013

Используйте ImageButton вместо ImageView

<ImageButton
    android:id="@+id/actionBarLogo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:paddingBottom="50dp"
    android:paddingLeft="10dp"
    android:paddingRight="50dp"
    android:paddingTop="50dp"
    android:scaleType="centerCrop"
    android:onClick="somemethod"
    android:src="@drawable/logo" />
person Dinesh T A    schedule 01.02.2013
comment
Это тоже работает... не могу проголосовать (недостаточно репутации) - person Jelle; 03.02.2013

насколько я понимаю вашу проблему, невозможно получить доступ к желаемому виду, потому что он не является частью вида или частью оформления окна. Проверьте этот пост здесь, чтобы найти обходной путь: https://stackoverflow.com/a/10187801/1965084

person alex    schedule 31.01.2013
comment
Привет Алекс, я боялся этого. Подождите немного больше времени для возможного другого ответа, прежде чем сделать свой принятым. - person Jelle; 31.01.2013