마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

이미지 버튼 클릭시, 다이얼로그 팝업의 이미지가 뜨도록 하고싶어요.

0 추천

 

안녕하세요.

 

팝업창을 띄울때, 팝업창 안에 글씨를 띄우는게 아니라, 저장되어 있는 큰 이미지를 띄우고 싶은데 어떻게 하는지 잘 모르겠습니다.. 각 case 문 마다, 다른 이미지를 띄워주어야 해서, 온셋클릭 이벤트 안의 내용을 어떻게 구성을 해주어야 할지 며칠째 미친듯이.. 고민입니다. 여러개의 다이얼로그들을 만들어 보았는데,

이미지관련해서는 왜이렇게 저에게 어려운 문제인지 모르겠네요..

 

아래의 xml에서 구성되어 있는 bell_image를 눌렀을 경우에 Bell 이미지는 case 0 에서는 one.jpg

case1에서는 two.jpg, case2에서는 three.jpg의 이미지를 띄우고 싶습니다.

 

다이얼로그에 대한 구성은 Bell_Image_Custom_Dialog.java 파일에 구성이 되어 있습니다.

 

First_Movie 부분에서 각 case문(1~5까지)에 따라서 각기 다른 이미지들을 보여주고자 하는데, Bell_Image_Custom_Dialog 부분이 어디가 잘못되서 이러는지 잘 모르겠습니다.. 

 

아래에 소스를 한번 적어보았습니다 ㅠ 소스가 추가되는 부분은 아래의 댓글에 좀 더 추가해 보았습니다.

 

<First_Movie 부분의 벨이미지 이벤트 부분>

Bell = (ImageView) findViewById(R.id.bell_image);
Bell.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Bell_Image_Custom_Dialog dialog = new Bell_Image_Custom_Dialog(First_Movie.this);
        dialog.show();

    }
});

 

< Bell_Image_Custom_Dialog 자바 부분 파일의 소스입니다 >

package ex.real_project;

import android.app.Dialog;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;

public class Bell_Image_Custom_Dialog extends Dialog {

    ImageView Movie_Instruction;

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

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_bell__image__custom__dialog);

        Movie_Instruction = (ImageView) findViewById(R.id.imageView2);
        //Movie_Instruction.setOnClickListener(this);

    }

    /*
    public void setImage(ImageView resource) {
        ImageView.setIamgeResource(resource);
    }
    */
}

 

공산당 (1,960 포인트) 님이 2016년 11월 2일 질문
공산당님이 2016년 11월 3일 수정
<Bell_Image_Custom_Dialog 자바 부분의 에러 부분입니다>

sunju.png




< Bell_Image_Custom_Dialog xml 파일의 소스입니다 >
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_bell__image__custom__dialog"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="ex.real_project.Bell_Image_Custom_Dialog">

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:srcCompat="@mipmap/ic_launcher"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        />

</RelativeLayout>

1개의 답변

0 추천
R.id.bell_image가 clickable="true"로 되어 있나요~?
핸디 (1,840 포인트) 님이 2016년 11월 2일 답변
네 되어있습니다.

혹시나 참고가 될까 싶어 글을 써 봅니다.

현재 Bell_Image_Custom_Dialog 부분에 보면 딱 이 두줄에 관련해서 에러가 뜹니다..
Movie_Instruction.setOnClickListener(this);
ImageView.setIamgeResource(resource);






package ex.real_project;

import android.app.Dialog;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;

public class Bell_Image_Custom_Dialog extends Dialog {

    ImageView Movie_Instruction;

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

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_bell__image__custom__dialog);

        Movie_Instruction = (ImageView) findViewById(R.id.imageView2);
        Movie_Instruction.setOnClickListener(this);

    }


    public void setImage(ImageView resource) {

        ImageView.setIamgeResource(resource);

    }

}
그리고 버튼을 눌렀을 경우에, 아래와 같은 에러가 뜹니다 ㅠ

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: ex.real_project, PID: 5941
                  android.util.AndroidRuntimeException: requestFeature() must be called before adding content
                      at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:304)
                      at android.app.Dialog.requestWindowFeature(Dialog.java:1108)
                      at ex.real_project.Bell_Image_Custom_Dialog.<init>(Bell_Image_Custom_Dialog.java:19)
                      at ex.real_project.First_Movie$3.onClick(First_Movie.java:61)
                      at android.view.View.performClick(View.java:4793)
                      at android.view.View$PerformClick.run(View.java:19950)
                      at android.os.Handler.handleCallback(Handler.java:739)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:135)
                      at android.app.ActivityThread.main(ActivityThread.java:5593)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:972)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
requestFeature() must be called before adding content <-- 이게 핵심이네요
setContentView() 이전에 requestFeature() 하시면 될듯합니다
아하 답변 감사합니다 핸디님. 정말 간절히 답변을 구하고 있었는데 이렇게 도움을 주실줄이야 ㅠ  아래와 같이 만드니까 해결 되었습니다.
그런데 정말 여기서 마지막으로 궁금한 부분이 있는데 하나 더 물어보아도 괜찮을까요..?


package ex.real_project;

import android.app.Dialog;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;

public class Bell_Image_Custom_Dialog extends Dialog {

    ImageView Movie_Instruction;

    public Bell_Image_Custom_Dialog(Context context) {

        super(context);

        setContentView(R.layout.activity_bell__image__custom__dialog);

    }
}
네 저도 초짜이지만.. 아는 한도 내에서 도와드리겠습니다
답변 감사드립니다.
다름이 아니라, 이제 벨을 눌렀을때, 팝업이미지가 뜨는것은 완료를 했습니다.
그런데 여기서 궁금한점이, 각 case문마다, 다른 이미지를 넣어서
팝업창을 띄워주고 싶은데 이 부분을 어떻게 해주어야 할지 모르겠습니다..

벨 이미지를 눌렀을때 이벤트 부분입니다.
Bell = (ImageView) findViewById(R.id.bell_image);
        Bell.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Bell_Image_Custom_Dialog dialog = new Bell_Image_Custom_Dialog(First_Movie.this);
                dialog.show();

            }
        });


그리고 스위치문은 아래와 같습니다. 위의 이미지를 눌렀을때  First.Movie 이미지가 출력되고, case1에서는 Second.Movie이미지가 출력 되도록 하고 싶은데
이렇게 만들려면 어떻게 해야 할까요 ..?

switch(position){

case 0:
  




}
case문 안에 Bell_Image_Custom_Dialog .Movie_Instruction.setImageResource(R.drawable.img2).. 이런식으로 하면 안될까요?
음... case문 안을 어떻게 구성을 해주어야 할지 ..
아래와 같이 하니까, 벨 부분의 이미지가 바뀌더라구요.
벨을 눌렀을때, 팝업 메세지가 떠야할텐데.. 아 ㅠ 고민이 많습니다..
이 부분을 어떻게 구성을 해야 할까요..

// ImageView Img_Dialog_1 = (ImageView) findViewById(R.id.bell_image);
// Img_Dialog_1.setImageResource(R.drawable.first_moive_image);
그리고 정말 죄송합니다만 한가지 더 질문을 해보아도 될까요 ㅠ

아래를 실행을 해보면 Bell_Image_Custom_Dialog  부분에 .show() 함수가 없는데 어째서, show 함수가 되는지 궁금합니다.

 Bell = (ImageView) findViewById(R.id.bell_image);
        Bell.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Bell_Image_Custom_Dialog dialog = new Bell_Image_Custom_Dialog(First_Movie.this);
                dialog.show();

            }
        });
show()함수는 이미 dialog 클래스(Dialog.java) 내부에 있는 함수고, 그것을 상속받아 사용하니까 당연히 사용할 수 있는거죠
팝업메시지라면 Toast를 말씀하시는건지 AlertDialog를 말씀하시는건지 모르겠지만 그것도 case문에 똑같이 넣으셔도 됩니다.
그러나 일일이 case0,case1,case2.. 이렇게 하면 귀찮기 때문에

public ListViewItem getItem(int position) {
        return listViewItemList.get(position);
    }

이렇게 주로 사용합니다
...