Вызов действия из пользовательского диалога

Я думаю, это всего лишь простой вопрос (я такой нуб…) У меня есть это пользовательское диалоговое окно, в котором есть 3 кнопки.

Теперь я хочу вызвать действие с одной из кнопок, поэтому я попробовал это:

public class picturedialog extends Dialog implements OnClickListener {
    Button Camera;

    public picturedialog (Context context){
        super (context);
        setContentView(R.layout.picturedialog);

        Camera = (Button) this.findViewById(R.id.pdButton1);

        Camera.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                dismiss();

                Intent myIntent = new Intent(view.getContext(), CameraActivity.class);
                startActivity(myIntent);

            }
        });
...
}

Затем на startActivity(myIntent) появляется красная волнистая линия. При наведении на него eclipse сообщает мне следующее: «Метод startActivity(Intent) не определен для типа new View.OnClickListener(){}» Э-э-э? Пожалуйста, сориентируйте меня, как это сделать правильно. Любая помощь будет оценена по достоинству.


person 황현정    schedule 24.01.2011    source источник


Ответы (2)


Я уверен, что вы слишком усложняете создание подклассов из Dialog. Попробуйте перейти к диалоговому руководству — https://developer.android.com/guide/topics/ui/dialogs.html#ShowingADialog

Обратите внимание, что диалоги создаются "на лету" (в Activity.onCreateDialog()) без необходимости иметь собственные настраиваемые классы диалогов. Поскольку вы установили прослушиватель внутри действия обертывания (если вы следуете руководству), вы можете вызвать startActivity(myIntent), потому что все поля/методы экземпляра класса обертки доступны для экземпляра внутреннего класса.

person Vit Khudenko    schedule 24.01.2011
comment
Спасибо. Я попробую это. :D Учебник, которому я следовал, был довольно простым и включал в себя создание отдельного класса от моего основного класса. :( Сначала я подумал, что причина, по которой мой код не работал, заключалась в том, что я вызывал активность из класса без активности. PS: я редко читаю документацию по Android, потому что она не очень дружелюбна для новых программистов. Но я буду попробуй на этот раз, я должен заставить все работать!!! - person 황현정; 25.01.2011

Предположим, что имя вашей деятельности — A, тогда вы просто делаете:

   A.this.startActivity(myIntent);

Проблема возникает из-за того, что «это» внутри вашего внутреннего класса относится к объекту этого внутреннего класса, когда вы хотите, чтобы это был объект включающего действия. A.this будет относиться к этому.

Если вы не включаете этот класс в действие, попробуйте вызвать метод startActivity from, используя контекст, который вы передали в метод, например. context.startActivty(myIntent). Метод startActivity принадлежит классу Context.

person Jems    schedule 24.01.2011
comment
Действительно? Спасибо! Я попробую это прямо сейчас. :D Большое спасибо... :) - person 황현정; 24.01.2011