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

탭호스트로 값을 넘겨서 특정 탭에 지정되게 하고 싶습니다.

0 추천

 

안녕하세요.

인텐트의 값전달에 따른, 탭호스트의 특정 위치로 이동시켜주는 부분에 대해서 고민입니다.

// 특정 탭의 위치로 이동시켜주는 구문임
tab_host.setCurrentTab(1);

현재 아래는 Location 이라는 자바 파일에서 버튼을 눌렀을 경우에, 탭호스트가 있는 Location_and_seat.class로 인

텐트를 하는 문장입니다. 그런데, 그냥 인텐트를 호출하는것이 아니라,  숫자1을 보냄을 알수가 있습니다.

그 이유는 Location_and_Seat 부분에 탭호스트가 0~2까지 지정되어있고, 아래의 버튼을 통해서 이동하게 되었을때

0~2까지 구성되어있는 탭의 버튼중 첫번째 탭부분으로 이동이 되게 하려고 의도했습니다.

 

Location_Selection_Btn = (Button) findViewById(R.id.Loation_Selection);
Location_Selection_Btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        int tabindex= 1;

        Intent intent = new Intent(getBaseContext(),Location_and_Seat.class);
        intent.putExtra("Tab_Selection",tabindex);
        startActivity(intent);

    }
});

 

< 아래소스는 Location_and_Seat파일의 Oncreate 아래부분>

int Tab_Index = getIntent().getIntExtra("Tab_Selection",0);
if(Tab_Index==1)
{
    // 특정 탭의 위치로 이동시켜주는 구문임
    tab_host.setCurrentTab(1);

}
else
{
    tab_host.setCurrentTab(0);
}

@@

***************************

 

 

 

 

 

 

Kind카인드 (3,600 포인트) 님이 2016년 11월 29일 질문
Kind카인드님이 2016년 12월 7일 수정

1개의 답변

0 추천
 
채택된 답변

아래 코드가 삽입된 함수(Method) 전체 코드를 작성해주세요

그리고, 아래 코드는 굳이 if 문으로 구분할 필요없이 아래 한줄로 처리하는 것이 좋겠네요. 

tab_host.setCurrentTab(Tab_Indec2);

if(Tab_Index2==2)
{
    // 특정 탭의 위치로 이동시켜주는 구문임
    tab_host.setCurrentTab(2);

}
else
{
    tab_host.setCurrentTab(0);
}
빅배스 (4,260 포인트) 님이 2016년 11월 29일 답변
Kind카인드님이 2016년 11월 30일 채택됨
답변 감사드립니다.
아래와 같이 만들어서 해결이 된것 같습니다.

 if(Tab_Index==1)
                {
                    // 특정 탭의 위치로 이동시켜주는 구문임
                    tab_host.setCurrentTab(1);
                }
                else
                {
                    tab_host.setCurrentTab(0);
                }

                if(Tab_Index2==2)
                {
                    tab_host.setCurrentTab(2);
                }

그런데, 탭이 넘어가는 부분은 해결했는데, 탭호스트의 위치를 옮겨줌과 동시에 아래에서 보시듯이 Location에서 Location_and_Seat 클래스로 넘기는 4개의 텍스트뷰의 문자열이 텍스트뷰에 잘 찍히다가, Seat 버튼의 인텐트를 누르고 돌아오고 난 뒤에, Tab1에 가서 Location에서 넘겼던 텍스트들이 사라져있음을 알수가 있는데..  이 데이터가 유지되도록 남기기 위한 방법이 혹시 있나요??


Location_Selection_Btn = (Button) findViewById(R.id.Loation_Selection);
        Location_Selection_Btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String str1 = val1;
                String str2 = val2;
                String str3 = val3;
                String str4 = val4;

                int tabindex= 1;

                Intent intent = new Intent(getBaseContext(),Location_and_Seat.class);
                intent.putExtra("Location_Information1",str1); //String타입의 데이터를 전달한다.
                intent.putExtra("Location_Information2",str2); //String타입의 데이터를 전달한다.
                intent.putExtra("Location_Information3",str3); //String타입의 데이터를 전달한다.
                intent.putExtra("Location_Information4",str4); //String타입의 데이터를 전달한다.

                intent.putExtra("Tab_Selection",tabindex);
                startActivity(intent);

            }
        });


 if(Tab_Index==1)
                {
                    // 특정 탭의 위치로 이동시켜주는 구문임
                    tab_host.setCurrentTab(1);

                }
                else
                {
                    tab_host.setCurrentTab(0);
                }

                if(Tab_Index2==2)
                {
                    tab_host.setCurrentTab(2);
                }


다시 정리해보자면, 인텐트를 통해서 Location 클래스에서 Location_and_Seat 부분으로 문자열을 4개를 넘겼고, Location_and_Seat부분에서 어떤 버튼이벤트를 통해서 인텐트를 호출하고 다시 돌아왔을 때 기존의 Location 클래스에서 Location_and_Seat로 보낸 텍스트뷰에 찍힌 문자열이 그대로 남아있게 하고 싶습니다.
그 부분을 해결하기 전에 currentTab 을 넘겨주고 지정하는 부분의 코드수정부터 해야될 것 같습니다. 위와 같이 해도 정상적으로 구동되긴 해서 수정하고 안하고는 Kind님 의지겠지만 불필요한 코드들이 많아 보입니다.

우선, Click Event를 통한 Tab Index를 넘겨주는 곳에서는
둘다 아래와 같이 "Tab_Selection" 으로만 전달하세요. Tab_Selection2 로 보내실 필요가 없습니다.
intent.putExtra("Tab_Selection",tabindex);

그리고 다음 화면에서는  
getIntent().getIntExtra("Tab_Selection", 0);

위와 같이 "Tab_Selection" 으로만 받으세요
그리고, Current Tab을 지정하는 곳에서는  if 문으로 비교하는 코드를 제거하고

tab_host.setCurrentTab(Tab_Index);

한줄로만 수정하세요


>>>>>>>> 돌아갔을 때 기존 정보를 남아있게 하고 싶다는 것에 대한 해결책은 정확히 Activity간의 관계가 어떻게 구성되어 있는지 모르겠어서

일단 다시 돌아가는 부분의 코드에서 Intent로 호출하지 말고,

onBackPressed(); 를 호출해 보세요
와 .. 아무래도 돌아가는 코드 부분에서는 intent로 넘기는 정보가 있기때문에.. 남아있지 않게되더라도 그냥 남겨두려고 합니다..ㅋㅋ.. 와 .. 근데 진짜 어떻게 제 소스를 안보시고 .. 이렇게 하시는거보면.. 정말 대단하시네요 ...
보내줘야 되는 정보가 있다면  돌아가는 activity onCreate () 에서 getIntent ()를 통해 전달받는 모든 data들을 같이 보내주시면 될텐데요

이전 엑티비티로 돌아가면서 어떤 결과를 같이 return 해야 된다면
이전 엑티비티에서  인텐트를 호출할때
startActivityForResult  를 사용하시는것이 좋습니다.
답변 정말 감사드립니다.

빅베스님.. 혹시.. 이부분에 대해서 제가 문제를 해결하고자 하는데.. 어떻게 해야할지 감이 오지 않는 부분이 있는데..도움을 얻을수 있을까 싶어서 글을 써봅니다... 바로 답을 주셨는데, 또 질문을 하네요 ㅠ


처음에 프로그램이 시작할때, 로그인을 통해서 들어가는 부분과, 비회원 로그인을 통해서 들어가는 부분이 있습니다.

그런데, 결론만 말씀드리자면, 로그인을 통해서 들어가게 되면 프로그램의 뒤쪽에 있는 레이팅바 부분에 있어서 현재 터치할때마다 평점이 나오도록 하게 되어 있는데, 비회원 로그인으로 로그인을 하게 된다면, 이 레이팅바 부분이 음영처리가 되어서 평점 부분에 대해서 터치를 할수 없도록 만들고 싶은데 그 방법을 모르겠습니다.



처음에 main화면에서 로그인 버튼 부분의 id는 LoginButton이고

비회원 로그인의 아이디는 Next 입니다. 그리고 아래와 같이 구성이 되어있습니다.


Button Next = (Button)findViewByIdLoginButton이고
        Next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               Intent itent = new Intent(getBaseContext(),Movie_ViewPager.class);
                        startActivity(itent);
            }
        });


Button Next = (Button)findViewById(R.id.Next);
        Next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent itent = new Intent(getBaseContext(),Movie_ViewPager.class);
                startActivity(itent);
            }
        });


그리고 각각 main에서 버튼을 눌렀을 경우에 Movie_ViewPager로 이동을 하게 됩니다.

그렇게 되면, 각각의 Movie_Viewpager쪽에는 가로로 넘기면서 이미지들을 볼수있는 뷰페이저 형태로 되어있고

각각의 이미지들을 누를때 Movie_Information으로 이동을 합니다.

그리고 Movie_Information 부분에 xml에 아래와 같이 레이팅바가 되어 있으며 그 아래부분에는 switch문에 따른 레이팅바의 자바부분입니다.

<RatingBar
                        android:id="@+id/Fifth_RatingBar"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerHorizontal="true"
                        android:numStars="5"
                        android:rating="3"
                        android:stepSize="1"

                        />

< 자바부분 >

Star_Percentage_TextView = (TextView) findViewById(R.id.RationgBar_TextView);
        Star_Percentage_RationgBar = (RatingBar) findViewById(R.id.Fifth_RatingBar);
        Star_Percentage_RationgBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
            @Override
            public void onRatingChanged(RatingBar ratingBar, float v, boolean b) {
                if (Star_Percentage_RationgBar.getRating() == 5) {
                    Star_Percentage_TextView.setText("너무 멋진 영화였어요!");
                } else if (Star_Percentage_RationgBar.getRating() == 4) {
                    Star_Percentage_TextView.setText("기대해도 좋아요!");
                } else if (Star_Percentage_RationgBar.getRating() == 3) {
                    Star_Percentage_TextView.setText("무난했어요");
                } else if (Star_Percentage_RationgBar.getRating() == 2) {
                    Star_Percentage_TextView.setText("기대하진 말아요");
                } else {
                    Star_Percentage_TextView.setText("괜히봤어요");
                }
            }
        });


처음에 제가 생각한 방향은 인텐트를 통해서 비회원 로그인시에 특정 번호값(int, 예를들어 999)을 통해서 보낸뒤에, Movie_Information에 도달했을때 getintent하여서 그 값을

비교해서, 999가 맞다면, 저 레이팅바 부분에 있어서 터치가 전혀 허용되지 않으며, 사용할수 없도록 가시적인 효과를 보이기 위해

음영처리를 하려고 했는데, 맨 처음부분에 ViewPager부분에서, 어떻게 이미지마다 그 값을 각각 클릭을 할떄마다, 넘겨야 할지 몰라서.. 이렇게 해메고 있습니다..

어떻게 해야, 제가 원하는 부분을 할수 있을지 궁금합니다 ㅠ
음.....일단, 회원 로그인인지 비회원 로그인인지를 계속 들고다니기 귀찮으니, 어딘가에 저장해 둡니다.

Application을 상속받은 Class 에 변수를 두고 저장하는 등의 다양한 방법이 있지만 AndroidManifest 에서
<action android:name="android.intent.action.MAIN" />
가 지정된 Activity의 멤버변수로 아래와 같이 static 변수를 만들어 주세요
public static boolean bMemberLoing = false;

그리고, 로그인화면에서 버튼을 클릭할 때 위 bMemberLogin 변수에 값을 저장합니다.

Kind님이 만드신 MainActivity 이름을 모르니, 일단 MainActivity 라고 가정하겠습니다.

// 여기가 로그인회원인 경우이면
Button Next = (Button)findViewByIdLoginButton이고
        Next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               MainActivity.bMemberLoing = true;    //로그인회원으로 저장
               Intent itent = new Intent(getBaseContext(),Movie_ViewPager.class);
                        startActivity(itent);
            }
        });


Button Next = (Button)findViewById(R.id.Next);
        Next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MainActivity.bMemberLoing = false;    //비회원으로 저장
                Intent itent = new Intent(getBaseContext(),Movie_ViewPager.class);
                startActivity(itent);
            }
        });


그리고 나서, Movie_Information Activity 에서 아래 코드 아래줄에 회원/비회원 로그인 정보로 RatingBar 선택가능여부설정을 합니다.

Star_Percentage_RationgBar = (RatingBar) findViewById(R.id.Fifth_RatingBar);

if(MainActivity.bMemberLogin){
    Star_Percentage_RationgBar.setIsIndicator(false);   //회원이면 별점주기 가능
}else{
    Star_Percentage_RationgBar.setIsIndicator(true);   //비회원이면 별점주기 불가능
}
답변 감사드립니다. 말씀하신대로

Main_Activity 부분에서 아래와 같이 멤버변수값을 설정을 했습니다.
public static boolean bMemberLoing = false;

그리고 Movie_Information 부분에서 온크리트 아래쪽에

if(Login_Activity.bMemberLogin){
            Star_Percentage_RationgBar.setIsIndicator(false);   //회원이면 별점주기 가능
        }else{
            Star_Percentage_RationgBar.setIsIndicator(true);   //비회원이면 별점주기 불가능
        }


위와 같이 설정을 했는데, bMerberLogin 부분에서 에러 사항으로는
"cannot resolve symbol 'bMerberLogin'이 빨간색으로 뜨는데.. 이부분에 대해서
왜 에러가 뜰지 .. 모르겠습니다.

정리해서 다시 말씀드리자면,
처음에 bMemberLogin을 지정한 부분은 선언쪽에 이렇게 선언을 했습니다.
public static boolean bMemberLoing = false; // 백베스 지정한 부분임..

그리고 온크리트 아래쪽의 setContentView에 적힌 내용은 아래와 같습니다.

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

그리고 Movie_Information 부분에 온크리트 아래쪽에 이렇게 설정을 했습니다.
그런데 위에서 말한바와 같이 Cannot resolve symbol 'bMerberLogin' 에러가뜹니다.

  if(Login_Activity.bMemberLogin){
            Star_Percentage_RationgBar.setIsIndicator(false);   //회원이면 별점주기 가능
        }else{
            Star_Percentage_RationgBar.setIsIndicator(true);   //비회원이면 별점주기 불가능
        }
public static boolean bMemberLoing = false;

위 코드를 Login_Activity에 선언한게 맞나요?
아하아하 빅배스님 해결했습니다.
다름이 아니라, 글자를 똑같이 쳤는데, 다시 지워보고 자동완성을 클릭해보니까
에러가 없어지더군요 ..

전역변수로 선언을 했는데, 왜 안찍히나 의아했습니다.

그런데 Movie_Information 부분으로 오니까 아래와 같은 에러가 뜹니다 ㅠ

  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RatingBar.setIsIndicator(boolean)' on a null object reference
                      at ex.real_project.Movie_Information.onCreate(Movie_Information.java:42)


이 한줄 부분에서 에러가 뜨네용..
Star_Percentage_RationgBar.setIsIndicator(true);   //비회원이면 별점주기 불가능
if(Login_Activity.bMemberLogin){
            Star_Percentage_RationgBar.setIsIndicator(false);   //회원이면 별점주기 가능
        }else{
            Star_Percentage_RationgBar.setIsIndicator(true);   //비회원이면 별점주기 불가능
        }

위 코드는 처음에 말한듯이 Movie_Infomation  Activity 에서 아래 코드 아래에 추가해야됩니다
Star_Percentage_RationgBar = (RatingBar) findViewById(R.id.Fifth_RatingBar);
네 감사합니다. 인텐트로 넘기는 방식으로 일단 해결을 해 보겠습니다.
감사합니다 ~~!!
아니오 그부분은 해결되었다고하니 그냥 사용하셔도됩니다
Star_Percentage_RationgBar 변수를 초기화하기전에 코드를 삽입하셔도 nullpointerException이 발생한거에요
해당변수 사용하지말고 intent로 넘기라는 댓글은 삭제했습니다. 제가 해결되었다는 이전 질문에 답변한거라서요.
음... 열심히 인텐트로 넘기고 있는건 아닌가 걱정이네요
아하 ㅋㅋ.. 아닙니다. 답변을 이제 봤습니다.
괜찮습니다. 모르면 원래 몸이 고생하면서라도 알아내면 다행이죠 뭐 ㅋㅋ
말씀하신대로, 초기화 아랫쪽에 넣어보니까 해결했습니다.

행복행복 ㅎ_ ㅎ
빅배스님.. 그.. 다름이 아니라, 이런것도 물어봐도 될지 .. 참 고민입니다.
이게.. 참..네... 혹시 꿀팁을 얻을수 있을까..해서  질문을 좀 올려보겠습니다

아래쪽에 링크를 눌러보시면, 줌인과 줌아웃 라이브러리를 압축으로
올려놓은 사이트입니다. 다름이 아니라, 제가 좌석부분에 대해서 도움을
받았던 적이 있는데, 이때 좌석을 나타내는 부분에 있어서 이 줌인 줌아웃
라이브러리를 사용하고자 합니다.

처음에 성인과 청소년 우대에 대해서 입력을 받고 선택완료를 누르면, 그창이
사라지면서 뒤쪽에 100개의 텍스트뷰 좌석과, 선택한 사람수에 따라서 클릭하는 부분 및 .. 여러가지 텍스트뷰와 버튼및 이미지들로 구성이 되어있습니다.

그런데, 여기서, 창이 사라지고 나게 되면, 이 줌인 줌아웃 뷰가 나타나게 하고싶은데 그 방법을 모르겠습니다..



그런데, 지금 막상 라이브러리를 적용시켜서 만들어보니까 배경이 되는 텍스트뷰의 온클릭이라던지 선택완료부분을 누를수가 없더군요.. 오로지 확대와 축소 기능을 원하기는 했지만, 다른 기능들이 동작이 안하게 됩니다..

일단.. 그부분도 그런데 선택완료를 누르게 될 경우에, 줌인 줌아웃 뷰가 지금처럼 나타나게 하고 싶은데.. 어떻게 해야될까요 ..?
흐엉

  View v = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.activity_Seat, null, false);
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

        ZoomView zoomView = new ZoomView(this);
        zoomView.addView(v);
        zoomView.setLayoutParams(layoutParams);
        zoomView.setMiniMapEnabled(true); // 좌측 상단 검은색 미니맵 설정
        zoomView.setMaxZoom(4f); // 줌 Max 배율 설정  1f 로 설정하면 줌 안됩니다.
        zoomView.setMiniMapCaption("Mini Map Test"); //미니 맵 내용
        zoomView.setMiniMapCaptionSize(20); // 미니 맵 내용 글씨 크기 설정

        RelativeLayout container = (RelativeLayout) findViewById(R.id.container);
        container.addView(zoomView);
R.layout.activity_Seat 이 뭔지 작성해주셔야 되구요
R.id.container 가 뭔지도 작성해 주셔야 됩니다.

그리고, 위 코드는 선택완료 Click Event Listener 안에 두셔야 겠구요
헛.. 빅배스님 ㅠ 라이브러리를 추가하고 적용시키기가 왜이렇게 어려운지 모르겠네요.. 계속 헤메도 길이 안보입니다 ㅠ

말씀하신 선택완료 부분에 아래의 코드를 넣었습니다.
그런데 container.addView(zoomView); 줄에서 아래와 같은 에러가
나타납니다.

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: ex.real_project, PID: 7120
                  java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.addView(android.view.View)' on a null object reference
                      at ex.real_project.Seat$3.onClick(Seat.java:207)

그리고 아래는 선택완료와 관련된 코드를 담아 보았습니다.
따로, 선택완료에 대해서 온클릭이벤트가 주어진것이 아니라
그떄 작성했었듯이 온클릭했을떄 id값을 불러와서 그값이 선택완료의 id와
같다면 이라고 구성되어있는 if문 부분이 선택완료의 부분입니다.
줄여보자면, if (v.getId() == R.id.Selection_Success) {   이부분의 소스가
버튼클릭시의 소스이고, 아래는 위의 한줄이 포함되어있는 전체코드입니다.
여기서 어떻게 해야할지를 모르겠습니다 ㅠ

View.OnClickListener mOnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (mSeat.contains(v.getId())) {     // mSeat 에 v.getId()의 키값으로 저장된 value 가 있는지 확인
                // 즉 텍스트뷰를 클릭한건지 판단하는 조건문


                if((int)v.getTag() == SEAT_UNSELECTED) {     //(빅배스) 선택되지 않은 좌석이면
                    if(mSelectedSeatCount < getTotalCount()) {  //(빅배스) 아직 선택 가능한 좌석이 존재하면
                        v.setBackgroundResource(R.drawable.selected_box_image);
                        v.setTag(SEAT_SELECTED);          //(빅배스) 선택한 좌석으로 설정
                        mSelectedSeatCount += 1;        // (빅배스) 선택한 좌석 수 추가

                    }else{                                  //(빅배스) 선택할 수 있는 좌석수가 없으면 Toast 로 안내
                        Toast toast = Toast.makeText(Seat.this, "더 이상 좌석을 선택할 수 없습니다.", Toast.LENGTH_SHORT);
                        toast.setGravity(Gravity.CENTER, 0, 0);
                        toast.show();
                    }

                }else{                                  //(백배스) 이미 선택된 좌석이면
                    v.setBackgroundResource(R.drawable.box_image);
                    v.setTag(SEAT_UNSELECTED);
                    mSelectedSeatCount -= 1;        // (빅배스) 선택한 좌석 수 제거
                }
                return;
            }



            // 선택완료를 누를 경우에, 전체 인원을 저장하는데 이 부분에서 총 금액 띄워주면 될듯..

            if (v.getId() == R.id.Selection_Success) {

                Total_Amount = (mAdult_Count * 10000 + mSchool_Count * 8000 + mSenior_Count * 5000);
                Total_Money.setText(Total_Amount + "원");

                v = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.activity_seat, null, false);
                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

                ZoomView zoomView = new ZoomView(Seat.this);
                zoomView.addView(v);
                zoomView.setLayoutParams(layoutParams);
                zoomView.setMiniMapEnabled(true); // 좌측 상단 검은색 미니맵 설정
                zoomView.setMaxZoom(4f); // 줌 Max 배율 설정  1f 로 설정하면 줌 안됩니다.
                zoomView.setMiniMapCaption("Mini Map Test"); //미니 맵 내용
                zoomView.setMiniMapCaptionSize(20); // 미니 맵 내용 글씨 크기 설정

                RelativeLayout container = (RelativeLayout) findViewById(R.id.container);
                container.addView(zoomView);

                findViewById(R.id.choiii).setVisibility(View.GONE);     // 클릭시 예매창이 사라지게 만들기

                return;
            }


            for (int i = 0; i < 9; i++) {
                if (v.getId() == adult + i) {
                    mAdult_Count = Integer.parseInt(((TextView) v).getText().toString());

                    if (Adult_Bacground != 0) {     // 기존에 선택된 값이 있다면 흰색으로 배경변경
                        findViewById(Adult_Bacground).setBackgroundResource(R.drawable.box_image);
                    }

                    v.setBackgroundResource(R.drawable.selected_box_image);      // 지금 선택된 필드 녹색으로 배경변경
                    Adult_Bacground = v.getId();
                    TextView Adult_number_txtview = (TextView) findViewById(R.id.Adult_number);
                    Adult_number_txtview.setText(mAdult_Count + "");

                } else if (v.getId() == school_people + i) {
                    mSchool_Count = Integer.parseInt(((TextView) v).getText().toString());
                    if (School_Bacground != 0) {
                        findViewById(School_Bacground).setBackgroundResource(R.drawable.box_image);
                    }
                    School_Bacground = v.getId();
                    v.setBackgroundResource(R.drawable.selected_box_image);

                    TextView School_number_txtview = (TextView) findViewById(R.id.School_number);
                    School_number_txtview.setText(mSchool_Count + "");


                } else if (v.getId() == senior_people + i) {
                    mSenior_Count = Integer.parseInt(((TextView) v).getText().toString());
                    if (Senior_Bacground != 0) {
                        findViewById(Senior_Bacground).setBackgroundResource(R.drawable.box_image);
                    }
                    Senior_Bacground = v.getId();
                    v.setBackgroundResource(R.drawable.selected_box_image);
                    TextView Senior_number_txtview = (TextView) findViewById(R.id.Senior_number);
                    Senior_number_txtview.setText(mSenior_Count + "");

                }
            }
        }
    };



+++


블로그를 다시 살펴보았는데, 메인액티비티.class에서 SetOncontentView 다음줄에 아래와 같이 구성이 되어있음을 보실수 있습니다.

View v = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.zoom_item, null, false);

inflate 오른쪽에 R.layout.zoom_item 은 xml에 저장된 화면을 보여주는것이라서, 저같은 경우 좌석이 있는 부분인

R.layout.zoom_item이 아닌 R.layout.activity_seat 를 주었습니다.

그리고 아래쪽에 내려가면

아래와 같은 두줄이 있음을 보셨을겁니다.

 RelativeLayout container = (RelativeLayout) findViewById(R.id.container);
 container.addView(zoomView);

그리고 container의 id가 있는 xml에 구조를 보면(activity_main.xml) 아래와 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorAccent" >
 
</RelativeLayout>
 

그리고 아래쪽 부분에  RelativeLayout container = (RelativeLayout) findViewById(R.id.container);
        container.addView(zoomView); 를 통해서, 선택한 컨테이너에 zoomView를 넣는 과정을 보실수 있습니다.


저같은 경우에, Seat부분에서 원글의 아래쪽에 달린 사진에서와 같이 한페이지에서 입력을 다 받고 선택완료를 누를 경우에, 줌뷰가 나타나게 하고

다른 버튼들에 대해서 잘 동작하도록 만들고 싶은데.. 어디를 바꿔주어야 할지 모르겠습니다..ㅠ
좀 바빠서..지금 저걸 다 분석할 시간이 없네요
일단, R.id.container 가 저 Activity Layout 안에 있는  RelativeLayout 이 아닌걸로 보이네요

현재 Activity 에 있는 Layout 을 가져와 addView 하세요
답변 감사드립니다 ㅠ

선택완료 부분에 아래와 같이 만들었는데.. 버튼을 누르게되니까 뒤의 화면이 나옵니다!! 입력을 받고 텍스트뷰를 지정해도 다 기능이 동작합니다.
그런데, 컨테이너 아래쪽의 이부분에서 어디를 기준으로 주어야 할지 모르겠습니다. 이것을 어떤 레이아웃을 주게 된다면, 초반에 입력을 받고, 뒤쪽에서 그부분만 확대가 할수 있기때문에.. 이부분에 대해서 좀 더 연구해보겠습니다.

RelativeLayout container = (RelativeLayout) findViewById(R.id.activity_seat);

 
 if (v.getId() == R.id.Selection_Success) {

                Total_Amount = (mAdult_Count * 10000 + mSchool_Count * 8000 + mSenior_Count * 5000);
                Total_Money.setText(Total_Amount + "원");

                findViewById(R.id.choiii).setVisibility(View.GONE);     // 클릭시 예매창이 사라지게 만들기

                v = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.activity_seat, null, false);
                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

                ZoomView zoomView = new ZoomView(Seat.this);
                zoomView.addView(v);
                zoomView.setLayoutParams(layoutParams);
                zoomView.setMiniMapEnabled(true); // 좌측 상단 검은색 미니맵 설정
                zoomView.setMaxZoom(4f); // 줌 Max 배율 설정  1f 로 설정하면 줌 안됩니다.
                zoomView.setMiniMapCaption("Mini Map Test"); //미니 맵 내용
                zoomView.setMiniMapCaptionSize(20); // 미니 맵 내용 글씨 크기 설정

                RelativeLayout container = (RelativeLayout) findViewById(R.id.activity_seat);
                container.addView(zoomView);


                return;
            }
빅배스님, 궁금한 부분이 있습니다.
줌뷰를 사용해서, 현재 아래쪽에 보면, 렐러티브로 Container을 생성했습니다.
그런데, 제 좌석들은 Linear가 10개가 있고 각각의 Linear안쪽에 텍스트뷰가 10개가 지정되어있습니다. 그래서 이 좌석10개에 대해서 줌을 사용하게 하려고, 10개의 리니어 레이아웃을 렐러티브로 크게 묶고,
     RelativeLayout container = (RelativeLayout) findViewById(R.id.activity_seat);
위의 끝부분에, R.id.지정한 레이아웃을 지정했는데 쉽게 되지 않더군요..


     RelativeLayout container = (RelativeLayout) findViewById(R.id.activity_seat);
                 container.addView(zoomView);
회식중이라...나중에 확인할께요~
해당 zoom 라이브러리를 사용해본적이 없어서....정확한 답변은 드리기 어려울 것 같네요.

그냥 제 생각만 적어볼께요

우선 100개의 좌석을 감싸고 있는  RelativeLayout은

zoomView.addView(여기);  <--- 이 곳에 들어가야 될 것으로 판단됩니다.


Kind님이 작성하신
RelativeLayout container = (RelativeLayout) findViewById(R.id.activity_seat);
                 container.addView(zoomView);

위 코드는 100개의 좌석을 감싸고 있는 RelativeLayout에  zoomView를 보여줘라 라는 의미인것으로 판단됩니다.


해당 라이브러리로 Kind님이 원하시는 결과를 얻으려면 고쳐야될 코드들이 너무 많아 보입니다.

100개의 좌석을 감싸고 있는 RelativeLayout 은
zoomView.addView(여기); <----여기에 들어가야 되는 것 같은데...

Kind님이 작성해준 코드를 보면 zoomView.addView(이곳) <--- 이곳에 들어갈 View 를 inflate를 이용해서 아래와 같이 가져옵니다.

v = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.activity_seat, null, false);

activity_seat  Layout(xml file에 해당되죠)을 View 로 Convert 해서 zoomView 에 AddView 합니다.

이렇게 구성하려면 activity_seat 안의 100개의 좌석을 구성하는 Layout을 별도 layout xml 파일로 구성하고 inflate 로 불러와서  처리해야 되는게 아닌가 싶네요.

저도 이런식으로 코딩한 경험은 없어서 답변을 달긴하지만 틀린 해답일수도 있습니다.

음....답변은 이정도까지밖에 못드리겠네요
흑 ㅠ.. 답변 감사드립니다.

최대한, 좌석 관련해서 좀 보는이로 하여금 편하게 만드려고 라이브러리를 사용하려고 했는데.. 이게 참 쉽지가 않네요 .. 정말 제 상황에 맞는 괜찮은 라이브러리를 찾았다고 생각했었는데 ㅠㅠ
빅베스님 제가 마지막으로 계속 고민을 겪는 문제가 있는데.. 바로 줌뷰 라이브러리를 제 소스코드에 적용을 시키는건데 ㅠ 이게 정말 쉽지가않네요ㅠ
바로 윗글에 답을 해주셨는데, 그래도 이 기능이 정말 꼭 필요해서
현재 제 코드에 적용하는데 많이 애를 먹고 있는데.. 줌뷰라이브러리를 제
소스코드에 적용시키려면 정말 많은 부분을 수정해야 하고, 현재 제 상황에서
많이 어려울까요..? 꼭 이 기능을 넣고싶어서요 ㅠ ㅠ
정확히 알지 못하는 라이브러리 이기도 하고 전체 코드를 보고 있지도 않고, 이렇게 글로만 설명드리는 것으로 가능할지 모르겠습니다.

제가 모든 코드를 작성할 수도 없기 때문에 일단 설명만 해보겠습니다.
잘 따라 오실수 있을지 모르겠네요

1) 100개의 좌석을 감싸고 있는 RelativeLayout  의 id 가  activity_seat 인가요?
  - 그렇다면 RelativeLayout 전체를 별도의 xml layout 파일로 분리하세요(파일이름은 seat_zoom_layout 이라고 간주하겠습니다)
  - 기존 xml Layout 에서는 해당 코드를 삭제해야 겠지요 (되돌려야 될수도 있으니 주석처리 하세요)
 - 삭제된 코드 대신에 좌석을 배치할 Layout 을 추가해주세요 어떤 Layout이든 상관없으니 그냥 RelativeLayout 을 삭제한 코드 대신에 추가하세요
<RelativeLayout
      android:id="@+id/seat_layout"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>
 - 별도로 분리한 layout을 zoomView에 addView 한 뒤  zoomView를 위 새로 추가된 RelativeLayout에 add 될 꺼에요

2) 100개의 좌석을 보여줘야 되는 Seat Activitty 에서 100개의 좌석을 감싸고 있는 RelativeLayout 내에 존재하는 각 구성요소(LinearLayout,  TextView) 들을 findViewById 를 이용해 변수들에 초기화해주는 코드들이 있을꺼에요
일단 그 코드들에 빨간불들이 들어올꺼에요
기존 xml Layout에서 주석처리 했으니까 참조가 불가능하니까 cannot resolved...어쩌구 하면서 오류가 발생하죠

3) 오류코드를 해결해야 하겠네요
  - Seat Activity onCreate() 위에 멤버 변수로
 private View mSeatView;
한줄을 추가하세요

4) 그리고 onCreate()  안에 해당 변수를 초기화 해주세요
 - 해당 변수는 별도 xml Layout으로 분리한 Layout을 View 로 Convert 한걸 저장하는 변수입니다.
setContentView(R.layout.xxxxxxx) 아래에 아래와 같이 초기화 해주세요

mSeatView = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.seat_zoom_layout, null, false);

4) 이제 빨간줄 오류를 해결합시다.
에러나는 부분들의 코드는 아래와 같을꺼에요
(LinearLayout)findViewById(R.id.xxxxxxx);
위 코드를 아래와 같이 수정하세요
(LinearLayout)mSeatView.findViewById(R.id.xxxxxx);

기존 xml Layout에서 찾지 말고, 별도로 분리한 xml Layout(seat_zoom_layout.xml) 에서 찾으라고 해야됩니다.

5) 일단 여기까지 오류코드가 없어야 됩니다.

6) 이제 seat_zoom_layout (100개의 좌석 layout) 을  zoomView 에 add 시켜야 합니다.

zoomView에 add 시키는 코드 부분을 아래와 같이 개선하세요

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

                ZoomView zoomView = new ZoomView(Seat.this);
                zoomView.addView(mSeatView);
                zoomView.setLayoutParams(layoutParams);
                zoomView.setMiniMapEnabled(true); // 좌측 상단 검은색 미니맵 설정
                zoomView.setMaxZoom(4f); // 줌 Max 배율 설정  1f 로 설정하면 줌 안됩니다.
                zoomView.setMiniMapCaption("Mini Map Test"); //미니 맵 내용
                zoomView.setMiniMapCaptionSize(20); // 미니 맵 내용 글씨 크기 설정

                RelativeLayout container = (RelativeLayout) findViewById(R.id.seat_layout);
                container.addView(zoomView);
답변 감사드립니다 ㅠ

써주신대로 한번, 하나하나 차근차근 4번까지 진행중에 실행시 아래와 같은 에러가 나서..

글을 올립니다.

  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                      at ex.real_project.Seat.onCreate(Seat.java:64)


그리고 64줄의 한줄의 코드는 아래와 같습니다.

Seat_Next_Button.setOnClickListener(new View.OnClickListener() {



1) 원래 좌석이 표시되어 있던 액티비티는 activity_seat 였고, 100개의 좌석을 담고있는

렐러티브 레이아웃의 id는 Total_Seat_Layout 이였고, 이부분을 말씀하신 seat_zoom_layout에

xml을 만들고 seat_zoom_layout에 넣었습니다. ( seat_zom_layout은 레이아웃에서 마우스 오른쪽의 new - > layout resource file로 만들었습니다. )

그리고 기존의 activity_seat 부분에서는 100개의 레이아웃을 seat_zoom_layout 으로 옮긴 상황입니다.

그리고 "삭제된 코드 대신에 좌석을 배치할 Layout을 추가해주세요" 라고 말씀을 하셨는데, 100개의 좌석을 떼어낸 activity_seat 부분에다가

첫번째 1번 부분에 글에 남겨놓으신 id = seat_layout의 렐러티브 레이아웃을 선언해 놓았습니다.

<RelativeLayout
       android:id="@+id/seat_layout"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"/>


그리고 Seat.java 파일의 맨 위쪽에다가 private View mSeatView; 를 선언했습니다.

그리고 Seat.java 부분에 oncreate아래쪽의 다음과 같이 이름을 바꾸었고

setContentView(R.layout.seat_zoom_layout);

그 아래쪽에 다음과 같이 선언을 해주었습니다.

  mSeatView = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.seat_zoom_layout, null, false);


근데 빨간줄이 하나도 뜨지가 않고 실행시 에러가 나네요.. 맨 처음 글에 썻던 에러가 납니다..,


혹시나 해서, Seat부분의 자바부분 아래에 담아보았습니다. 글이 좀 길기에, 주석부분은 최대한 다 지워보았고 길이가 조금 길어서 잘라서 붙여보겠습니다.



import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import pl.polidea.view.ZoomView;
import java.util.ArrayList;

public class Seat extends AppCompatActivity {

    ArrayList<Integer> mSeat = new ArrayList<>();  

    int adult = R.id.Adult_Seat_00;
    int school_people = R.id.School_Seat_00;
    int senior_people = R.id.Senior_Seat_00;

    int mSeatID = R.id.Seat_00;     

    int mAdult_Count = 0;  
    int mSchool_Count = 0;    
    int mSenior_Count = 0;  

    ImageView Seat_Before_Img;       
    TextView Total_Money;               

    int Adult_Bacground;        
    int School_Bacground;      
    int Senior_Bacground;       

    int Total_Amount = 0;  

    Button Seat_Next_Button;

  
    private final static int SEAT_UNSELECTED = 0;
    private final static int SEAT_SELECTED = 1;


    int mSelectedSeatCount = 0;


    private View mSeatView;
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.seat_zoom_layout); // 이부분도 바꿨음..

        mSeatView = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.seat_zoom_layout, null, false);


        Seat_Next_Button = (Button) findViewById(R.id.Seat_SelectionAccess_Button);
        Seat_Next_Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(getApplicationContext(), Location_and_Seat.class);

                int tabindex= 2;

                intent.putExtra("Seat_Total_Mount", Total_Amount);
                intent.putExtra("Adult_number", mAdult_Count);  
                intent.putExtra("School_number", mSchool_Count);
                intent.putExtra("Senior_number", mSenior_Count);

                intent.putExtra("Tab_Selection",tabindex);

                int idx=0;
                for (int i=0; i < mSeat.size (); i++) {

                        TextView tv = (TextView)findViewById(mSeat.get(i));

             

                        if ((int)tv.getTag () == SEAT_SELECTED){
                            intent.putExtra ("seat" + idx, tv.getText().toString());
                            idx++;
                        }
                }


                startActivity(intent);
            }
        });


        Seat_Before_Img = (ImageView) findViewById(R.id.Seat_Before_Image);
        Seat_Before_Img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });

        init();
        initSeat();

        Total_Money = (TextView) findViewById(R.id.Total_Movie_Money);

    }

    private void init() {

       
        findViewById(R.id.Selection_Success).setOnClickListener(mOnClickListener);

        for (int i = 0; i < 9; i++) {
            findViewById(adult + i).setOnClickListener(mOnClickListener);
            findViewById(school_people + i).setOnClickListener(mOnClickListener);
            findViewById(senior_people + i).setOnClickListener(mOnClickListener);
        }
    }

 


    void initSeat()
    {
        for (int i = 0; i < 109; i++)
        {

            int seatId = mSeatID + i;

         
            if (seatId != R.id.First_Seat_Layout && seatId != R.id.Second_Seat_Layout && seatId != R.id.Third_Seat_Layout && seatId != R.id.Fourth_Seat_Layout && seatId != R.id.Fifth_Seat_Layout
                    && seatId != R.id.Sixth_Seat_Layout && seatId != R.id.Seventh_Seat_Layout && seatId != R.id.Eigth_Seat_Layout && seatId != R.id.Ninth_Seat_Layout
                    && seatId != R.id.Hundred_Seat_Layout)
            {
                mSeat.add(mSeatID + i);
                findViewById(mSeatID + i).setOnClickListener(mOnClickListener);
                findViewById(mSeatID + i).setTag(SEAT_UNSELECTED);      
            }
        }
    }


    private int getTotalCount(){
        return mAdult_Count + mSchool_Count + mSenior_Count;
    }


    View.OnClickListener mOnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (mSeat.contains(v.getId())) {     


                if((int)v.getTag() == SEAT_UNSELECTED) {    
                    if(mSelectedSeatCount < getTotalCount()) {  
                        v.setBackgroundResource(R.drawable.selected_box_image);
                        v.setTag(SEAT_SELECTED);        
                        mSelectedSeatCount += 1;       

                    }else{                                 
                        Toast toast = Toast.makeText(Seat.this, "더 이상 선택할 수 없습니다.", Toast.LENGTH_SHORT);
                        toast.setGravity(Gravity.CENTER, 0, 0);
                        toast.show();
                    }

                }else{                                  
                    v.setBackgroundResource(R.drawable.box_image);
                    v.setTag(SEAT_UNSELECTED);
                    mSelectedSeatCount -= 1;        
                }
                return;
            }


            

            if (v.getId() == R.id.Selection_Success) {

                Total_Amount = (mAdult_Count * 10000 + mSchool_Count * 8000 + mSenior_Count * 5000);
                Total_Money.setText(Total_Amount + "원");

                findViewById(R.id.choiii).setVisibility(View.GONE);    


                View vr = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.seat_zoom_layout, null, false);
                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

                ZoomView zoomView = new ZoomView(Seat.this);
                zoomView.addView(vr);
                zoomView.setLayoutParams(layoutParams);
                zoomView.setMiniMapEnabled(true); // 좌측 상단 검은색 미니맵 설정
                zoomView.setMaxZoom(4f); // 줌 Max 배율 설정  1f 로 설정하면 줌 안됩니다.
                zoomView.setMiniMapCaption("Seat MiniMap"); //미니 맵 내용
                zoomView.setMiniMapCaptionSize(20); // 미니 맵 내용 글씨 크기 설정

                RelativeLayout container = (RelativeLayout) findViewById(R.id.Seat_Toolbar);
                container.addView(zoomView);

                return;
            }


              };
}
그리고 좌석에 대해서 따로 생성한 seat_zoom_layout에는

100개의 텍스트뷰를 감싸고 있고 10개의 리니어레이아웃을 감싸고 있는

렐러티브는 아래와 같습니다.

 <RelativeLayout
        android:id="@+id/Total_Seat_Layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

너무 혼란스러우시겠어요 ㅠㅠ 죄송합니다.
setContentView(R.layout.seat_zoom_layout);

위  코드를
setContentView (R.layout.activity_seat);

으로 바꾸세요
답변 감사드립니다. 말씀하신것처럼 Seat에서 바꾸었습니다.

그런데 Seat 부분에서 다음과 같은 두줄에서 에러가 납니다..

145줄의  findViewById(mSeatID + i).setOnClickListener(mOnClickListener);

와  initSeat(); 함수에서 에러가 납니다.

에러코드는 아래와 같습니다..

  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                      at ex.real_project.Seat.initSeat(Seat.java:145)
                      at ex.real_project.Seat.onCreate(Seat.java:107)

그리고 말씀하신 4번째 부분에 빨간줄의 오류를 해결하자고 하셨는데
위쪽에 나온 에러가 아니라면, 딱히 Seat부분과 seat_zoom_layout부분에도
에러가 나지 않아서 말씀해주신

" 에러나는 부분들의 코드는 아래와 같을꺼에요
(LinearLayout)findViewById(R.id.xxxxxxx);
위 코드를 아래와 같이 수정하세요
(LinearLayout)mSeatView.findViewById(R.id.xxxxxx);

기존 xml Layout에서 찾지 말고, 별도로 분리한 xml Layout(seat_zoom_layout.xml) 에서 찾으라고 해야됩니다.  " 부분에 대해서
잘 모르겠습니다..

사실, 제 코드에 대해서, 내부적으로 본적이 없으시고 라이브러리도 간단한 것인줄 알았는데 이리 복잡한거여서 굉장히 .. 이렇게 대화로 풀어나가기가 곤란하네요 ㅠ
mSeatID 를 초기화해주는 코드 수정이 필요해보입니다
seat_zoom_layout 의 첫번째 textview id 로 초기화가되어야 할것같네요
모르시겠으면 해당부분 코드를 작성해주세요
다시 생각해보니 빨간줄은 안생기고  실행시 NullPoint  에러가 나겠네요
답변 감사드립니다.

현재 좌석과 관련해서 seat_zoom_layout의 내용은 아래와 같습니다.

전부를 다 담기는 코드의 양이 중복되는것도 많고 너무 길어서, 이렇게만

표시해도 이해하실거라고 생각을 해서 이만큼 적어보았습니다.





 <RelativeLayout
        android:id="@+id/Total_Seat_Layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    <LinearLayout
        android:id="@+id/First_Seat_Layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/entrance_layout"
        android:orientation="horizontal"
        android:layout_marginTop="60dp"
        android:weightSum="21">

        <TextView
            android:id="@+id/Seat_00"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/handicapped_checkbox_img"
            android:textColor="#000000"
            android:paddingTop="10dp"
            android:layout_weight="2"
            android:text="A1"
            android:textAlignment="center"
            />
코드중에 mSeatID = R.    .....  으로 초기화하는 코드부분을 올려주세요
포기하지마세요 ㅎ
안올려주셔도 되겠네요 첨에 말했듯이 findViewById  부분에세 에러가 발생할께에요
seat_zoom_layout 에 속해있는것들은
mSeatView.findViewById  로 수정하셔야되요
"seat_zoom_layout 에 속해있는것들은 mSeatView.findViewById  로 수정하셔야됩니다 " 라고 말씀을 하셨는데, 현재 seat_zoom_layout은 xml만 따로 생성을 해서 자바 파일은 없는 상태입니다. 만약, 자바파일도 필요하다고 말씀하시면, 바로 수정하겠습니다.

그리고, 원래 Seat 부분에 위쪽에 이렇게 선언이 되어있었습니다.

int mSeatID = R.id.Seat_00;     // 첫번째 좌석 ID값

현재, 아직 seat_zoom_layout에 자바파일이 없기도 하고, Seat부분에서

따로 에러표시가 나는 부분은 없습니다.

응원 감사합니다 ㅠㅡ ㅠ!!
4) 그리고 onCreate()  안에 해당 변수를 초기화 해주세요
 - 해당 변수는 별도 xml Layout으로 분리한 Layout을 View 로 Convert 한걸 저장하는 변수입니다.
setContentView(R.layout.xxxxxxx) 아래에 아래와 같이 초기화 해주세요

mSeatView = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.seat_zoom_layout, null, false);

위 4번을 생략하신건가요? 자바 파일은  필요없습니다.
setContentView (R.layout.activity_seat);  아래줄에

mSeatView = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.seat_zoom_layout, null, false);


위 코드를 추가하라는거였습니다
빅배스님 답변 감사드립니다.

제가 약간 오해하고 있는데 있는데.. 이것때문에 문제가 일어나는게 아닌가

싶습니다. 자꾸만, 다른부분에서 에러가 나서 그런데, 에러가 나는 부분을

주도면밀하게 살펴보았는데 처음에 입력을 받고, 뒷부분에 이미지뷰로 만든

스크롤뷰의 화면이라던지, 아니면 결제금액과 선택완료 버튼 부분과 같은것도

똑같이, seat_zoom_layout으로 옮겨주어야 할까요?

예를들어, 현재 Seat 부분에서 에러가 나는 부분은 아래와 같습니다.

아래의 부분은 처음에 성인, 청소년, 우대 입력을 받고, 좌석을 다 선택한 뒤에

선택완료를 누르는 부분입니다.



Seat_Next_Button = (Button) findViewById(R.id.Seat_SelectionAccess_Button);
        Seat_Next_Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(getApplicationContext(), Location_and_Seat.class);

                int tabindex= 2;

                intent.putExtra("Seat_Total_Mount", Total_Amount); // 총 금액의 정보를 넘긴다.
                intent.putExtra("Adult_number", mAdult_Count);   // 성인의 숫자를 넘김
                intent.putExtra("School_number", mSchool_Count); // 학생의 숫자를 넘김
                intent.putExtra("Senior_number", mSenior_Count); // 우대의 숫자를 넘김

                intent.putExtra("Tab_Selection",tabindex);

                int idx=0;
                for (int i=0; i < mSeat.size (); i++) {

                        TextView tv = (TextView)findViewById(mSeat.get(i));

                       // Log.i ("seat", "##### i :" + i);

                        if ((int)tv.getTag () == SEAT_SELECTED){
                            intent.putExtra ("seat" + idx, tv.getText().toString());
                            idx++;
                        }
                }


                startActivity(intent);
            }
        });

단순히, 좌석 100개뿐만이 아니라, 처음에 입력을 받고, 선택완료를 누를 시
visibility가 gone이 되고 나타나는 화면을 전부, seat_zoom_layout으로
옮겨주어야 하는건가요?
seat_zoom_layout 에는 줌인 줌아웃의 대상이 되는 것들만 들어가야됩니다.
다른부분에서 에러가 난다고 하셨는데
에러가 발생하는 코드를 올려주세요

제 생각에는 일부 findViewById  코드부분만 에러가 날것같은데 아닌가 보네요
아하 .. 좌석부분에 있어서는 줌인 줌아웃의 대상만 들어가야 하는것이군요.

그렇다면 아래와같이  에러가 나는 부분에 있어서 이유가 뭔지 모르겠습니다.

바로 위의 올린 코드와 같이 선택완료 부분입니다.

 Seat_Next_Button = (Button) findViewById(R.id.Seat_SelectionAccess_Button);
        Seat_Next_Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(getApplicationContext(), Location_and_Seat.class);

                int tabindex= 2;

                intent.putExtra("Seat_Total_Mount", Total_Amount); // 총 금액의 정보를 넘긴다.
                intent.putExtra("Adult_number", mAdult_Count);   // 성인의 숫자를 넘김
                intent.putExtra("School_number", mSchool_Count); // 학생의 숫자를 넘김
                intent.putExtra("Senior_number", mSenior_Count); // 우대의 숫자를 넘김

                intent.putExtra("Tab_Selection",tabindex);

                int idx=0;
                for (int i=0; i < mSeat.size (); i++) {

                        TextView tv = (TextView)findViewById(mSeat.get(i));

                       // Log.i ("seat", "##### i :" + i);

                        if ((int)tv.getTag () == SEAT_SELECTED){
                            intent.putExtra ("seat" + idx, tv.getText().toString());
                            idx++;
                        }
                }


                startActivity(intent);
            }
        });
TextView tv = (TextView)findViewById(mSeat.get(i));
위 코드도 mSeatView.findViewById  로 고치셔야죠

mSeat에는 seat_zoom_layout 에 있는 텍스트뷰들의 id값들이 들어있으니까요

제가 하라는대로 차분히 안 따라하시는듯..ㅎ

첨에 번호붙여가며 설명했던 6번 부분도 제가 작성한 코드로 바꾸셔야되요

Kind님 코드에
View vr = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.seat_zoom_layout, null, false);

위 코드가 남아있다면 삭제하시구요

해당코드는 onCreate () setContentView (R.layout.activity_seat); 아래줄에

mSeatView = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.seat_zoom_layout, null, false);

위와같이 멤버변수로 미리 최기화했으니까요
첨에 작성했던글을 다시한번 천천히 읽어보세요
답변 감사드립니다..  말씀해주신걸 제가 이해를 잘 못해서 너무 두서없이 글을 썼네요.. 죄송합니다.

말씀해주신 1~6번까지 차례대로 다시 꼼꼼히 읽어보았고 나머지 사항들은
다 충족이 되었지만, 한가지 안된부분은 Seat 부분에서 findviewById 부분의
앞쪽에 mSeatView 를 붙여주는 부분이 남아있습니다.

그런데 앞에다 mSeatView를 붙여주는 부분은, seat_zoom_layout 부분에서
줌효과가 적용이 되어야 하는 부분에  findviewbyid 앞쪽에다가 지정을 해주면 되는건가요?
네 seat_zoom_layout 에 포함된 id 로 찾고자하는곳 앞에 붙이시면 됩니다
mSeatView 가 곧 seat_zoom_layout  이니까 거기서 찾아야죠
답변 감사드립니다..

빅배스님 제가 나름대로, seat_zoom_layout에 쓰인 곳에 따라서

findviewbyid 앞쪽에다가 mSeatView를 지정해줬는데 어디가 잘못된 부분인지

자꾸만,  Seat_Next_Button.setOnClickListener(new View.OnClickListener() {

부분에서 아래와 같은 에러가 뜹니다.

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                      at ex.real_project.Seat.onCreate(Seat.java:64)


Seat.java 부분에 여러 코드들이 있지만..

제가 생각하기에는 mSeat부분을 붙여야 하는곳은 아래의 써진 코드가
전부라고 생각을 했습니다. 아래의 10개의 레이아웃 또한 zoom_seat_layout에 있어서 저부분도      mSeat을 붙여야 하는거 같은데.. 그럼 각각의 10개의 앞쪽에 mSeat.findviewbyid(R.id.First_Layout) ~ mSeat.findviewbyid(R.id.hundred_Layout) 까지 해야하는건지 궁금합니다. 그리고 10개의 레이아웃을 비교하는 if문 아래쪽에도 온클릭과 선택이 되었는지 안되었는지를 비교하기 위해 사용되어야 해서 mSeatView를 붙여주었습니다.

아래의 소스는 전체가 아닌, mSeat처리한것에 대해서 올려보았습니다.


 private View mSeatView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.seat_zoom_layout);

        mSeatView = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.seat_zoom_layout, null, false);

        Seat_Next_Button = (Button) findViewById(R.id.Seat_SelectionAccess_Button);
        Seat_Next_Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(getApplicationContext(), Location_and_Seat.class);

                int tabindex= 2;

                intent.putExtra("Seat_Total_Mount", Total_Amount);
                intent.putExtra("Adult_number", mAdult_Count);   
                intent.putExtra("School_number", mSchool_Count);
                intent.putExtra("Senior_number", mSenior_Count);

                intent.putExtra("Tab_Selection",tabindex);

                int idx=0;
                for (int i=0; i < mSeat.size (); i++) {

                        TextView tv = (TextView) mSeatView.findViewById(mSeat.get(i));

                        if ((int)tv.getTag () == SEAT_SELECTED){
                            intent.putExtra ("seat" + idx, tv.getText().toString());
                            idx++;
                        }
                }


                startActivity(intent);
            }
        });


        Seat_Before_Img = (ImageView) findViewById(R.id.Seat_Before_Image);
        Seat_Before_Img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });

        init();
        initSeat();

        Total_Money = (TextView) findViewById(R.id.Total_Movie_Money);

    }

    private void init() {

       /* 처음에 일반 9개의 텍스트뷰, 청소년 9개의 텍스트뷰, 우대 9개의 텍스트뷰에 온클릭을 설정 */
        findViewById(R.id.Selection_Success).setOnClickListener(mOnClickListener);

        for (int i = 0; i < 9; i++) {
            findViewById(adult + i).setOnClickListener(mOnClickListener);
            findViewById(school_people + i).setOnClickListener(mOnClickListener);
            findViewById(senior_people + i).setOnClickListener(mOnClickListener);
        }
    }



    void initSeat()
    {
        for (int i = 0; i < 109; i++)
        {

            int seatId = mSeatID + i;

            // 음...
            if (seatId != R.id.First_Seat_Layout && seatId != R.id.Second_Seat_Layout && seatId != R.id.Third_Seat_Layout && seatId != R.id.Fourth_Seat_Layout && seatId != R.id.Fifth_Seat_Layout
                    && seatId != R.id.Sixth_Seat_Layout && seatId != R.id.Seventh_Seat_Layout && seatId != R.id.Eigth_Seat_Layout && seatId != R.id.Ninth_Seat_Layout
                    && seatId != R.id.Hundred_Seat_Layout)
            {
                mSeat.add(mSeatID + i);
                mSeatView.findViewById(mSeatID + i).setOnClickListener(mOnClickListener);
                mSeatView.findViewById(mSeatID + i).setTag(SEAT_UNSELECTED);      //(빅배스) 좌석이 선택되지 않은 상태값 설정.
            }
        }
    }
아까 분명히
setContentView (R.layout.seat_zoom_layout);

setContentView (R.layout.activity_seat);

으로 수정하라고 했는데 그대로 있네요

고치고 다시 돌려보세요
집에는 컴퓨터가 없습니다  휴대폰으로 코드분석 및 답변을 상세히 작성해주는것이 불편해서
필요한 답변만 간략하게 할수밖에 없어요
최대한 자세히보고 이해하려고 노력해주셔야되요ㅜㅜ
답변 감사드립니다ㅜㅜ.

다시 처음부터 끝까지 최대한 보고 다시 몇번이고 살펴보겠습니다 ㅜㅜ
성공했나요? 완성하셨으면 좋겠네요
아니요 ㅠ 더 묻기도 좀 민망해서 계속 해보고는 있는데.. 자꾸 엉뚱하게 ..
감을 못잡고 있는것 같네요 ㅠ ㅠ

아래의 두줄에서 에러가 뜹니다..

  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                      at ex.real_project.Seat.initSeat(Seat.java:144)
                      at ex.real_project.Seat.onCreate(Seat.java:106)

144줄은 10개의 레이아웃을 비교하고 있는 곧 다음줄이고

 mSeatView.findViewById(mSeatID + i).setOnClickListener(mOnClickListener);

106줄은 initSeat();을 호출하는 부분이 에러가납니다..

그리고, 아래쪽에 한번 수정한 부분을 달아보았습니다.

빅배스님이 보시기에, 지금 거의 다 온것 같은지.. 아니면 아직도 많은 부분이 개선되어야 하는지 말씀해주시면 정말 감사드리겠습니다 ㅠ


아래의 소스를 한번 달아보겠습니다. 조금 긴 부분이 있어서, 나누어서 달아보겠습니다. 처음에 성인과 청소년 우대에 대해서 입력받는 액티비티가 있는 부분은, activity_seat 이고, 100개의 좌석이 있는곳은 seat_zoom_layout 입니다.


ArrayList<Integer> mSeat = new ArrayList<>();

    int adult = R.id.Adult_Seat_00;
    int school_people = R.id.School_Seat_00;
    int senior_people = R.id.Senior_Seat_00;

    int mSeatID = R.id.Seat_00;     

    int mAdult_Count = 0;       
    int mSchool_Count = 0;     
    int mSenior_Count = 0;      

    ImageView Seat_Before_Img;          
    TextView Total_Money;              

    int Adult_Bacground;        
    int School_Bacground;       
    int Senior_Bacground;        

    int Total_Amount = 0;   

    Button Seat_Next_Button;

    /*  각 텍스트뷰에 좌석 선택여부를 지정하기 위해 추가 */
    private final static int SEAT_UNSELECTED = 0;
    private final static int SEAT_SELECTED = 1;

 
    int mSelectedSeatCount = 0;

    private View mSeatView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_seat);


        mSeatView = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.seat_zoom_layout, null, false);

        Seat_Next_Button = (Button) findViewById(R.id.Seat_SelectionAccess_Button);
        Seat_Next_Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(getApplicationContext(), Location_and_Seat.class);

                int tabindex= 2;

                intent.putExtra("Seat_Total_Mount", Total_Amount);
                intent.putExtra("Adult_number", mAdult_Count);   
                intent.putExtra("School_number", mSchool_Count);
                intent.putExtra("Senior_number", mSenior_Count);

                intent.putExtra("Tab_Selection",tabindex);

                int idx=0;
                for (int i=0; i < mSeat.size (); i++) {

                        TextView tv = (TextView) mSeatView.findViewById(mSeat.get(i));

                        // Log.i ("seat", "##### i :" + i);

                        if ((int)tv.getTag () == SEAT_SELECTED){
                            intent.putExtra ("seat" + idx, tv.getText().toString());
                            idx++;
                        }
                }


                startActivity(intent);
            }
        });
Seat_Before_Img = (ImageView) findViewById(R.id.Seat_Before_Image);
        Seat_Before_Img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });

        init();
        initSeat();

        Total_Money = (TextView) findViewById(R.id.Total_Movie_Money);

    }

    private void init() {

  
        findViewById(R.id.Selection_Success).setOnClickListener(mOnClickListener);

        for (int i = 0; i < 9; i++) {
            findViewById(adult + i).setOnClickListener(mOnClickListener);
            findViewById(school_people + i).setOnClickListener(mOnClickListener);
            findViewById(senior_people + i).setOnClickListener(mOnClickListener);
        }
    }

   

    void initSeat()
    {
        for (int i = 0; i < 109; i++)
        {

            int seatId = mSeatID + i;

         
            if (seatId != R.id.First_Seat_Layout && seatId != R.id.Second_Seat_Layout && seatId != R.id.Third_Seat_Layout && seatId != R.id.Fourth_Seat_Layout && seatId != R.id.Fifth_Seat_Layout
                    && seatId != R.id.Sixth_Seat_Layout && seatId != R.id.Seventh_Seat_Layout && seatId != R.id.Eigth_Seat_Layout && seatId != R.id.Ninth_Seat_Layout
                    && seatId != R.id.Hundred_Seat_Layout)
            {
                mSeat.add(mSeatID + i);
                mSeatView.findViewById(mSeatID + i).setOnClickListener(mOnClickListener);
                mSeatView.findViewById(mSeatID + i).setTag(SEAT_UNSELECTED);      //(빅배스) 좌석이 선택되지 않은 상태값 설정.
            }
        }
    }



    private int getTotalCount(){
        return mAdult_Count + mSchool_Count + mSenior_Count;
    }


    View.OnClickListener mOnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (mSeat.contains(v.getId())) {     


                if((int)v.getTag() == SEAT_UNSELECTED) {    
                    if(mSelectedSeatCount < getTotalCount()) {  
                        v.setBackgroundResource(R.drawable.selected_box_image);
                        v.setTag(SEAT_SELECTED);          
                        mSelectedSeatCount += 1;      

                    }else{                                  
                        Toast toast = Toast.makeText(Seat.this, "더 이상 좌석을 선택할 수 없습니다.", Toast.LENGTH_SHORT);
                        toast.setGravity(Gravity.CENTER, 0, 0);
                        toast.show();
                    }

                }else{                               
                    v.setBackgroundResource(R.drawable.box_image);
                    v.setTag(SEAT_UNSELECTED);
                    mSelectedSeatCount -= 1;     
                }
                return;
            }




            if (v.getId() == R.id.Selection_Success) {

                Total_Amount = (mAdult_Count * 10000 + mSchool_Count * 8000 + mSenior_Count * 5000);
                Total_Money.setText(Total_Amount + "원");

                findViewById(R.id.choiii).setVisibility(View.GONE);     



                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

                ZoomView zoomView = new ZoomView(Seat.this);
                zoomView.addView(mSeatView);
                zoomView.setLayoutParams(layoutParams);
                zoomView.setMiniMapEnabled(true); // 좌측 상단 검은색 미니맵 설정
                zoomView.setMaxZoom(4f); // 줌 Max 배율 설정  1f 로 설정하면 줌 안됩니다.
                zoomView.setMiniMapCaption("Seat MiniMap"); //미니 맵 내용
                zoomView.setMiniMapCaptionSize(20); // 미니 맵 내용 글씨 크기 설정

                RelativeLayout container = (RelativeLayout) findViewById(R.id.seat_layout);
                container.addView(zoomView);

                return;
            }


            for (int i = 0; i < 9; i++) {
                if (v.getId() == adult + i) {
                    mAdult_Count = Integer.parseInt(((TextView) v).getText().toString());

                    if (Adult_Bacground != 0) {    
                        findViewById(Adult_Bacground).setBackgroundResource(R.drawable.box_image);
                    }

                    v.setBackgroundResource(R.drawable.selected_box_image);      
                    Adult_Bacground = v.getId();

                    TextView Adult_number_txtview = (TextView) findViewById(R.id.Adult_number);
                    Adult_number_txtview.setText(mAdult_Count + "");

                } else if (v.getId() == school_people + i) {
                    mSchool_Count = Integer.parseInt(((TextView) v).getText().toString());
                    if (School_Bacground != 0) {
                        findViewById(School_Bacground).setBackgroundResource(R.drawable.box_image);
                    }
                    School_Bacground = v.getId();
                    v.setBackgroundResource(R.drawable.selected_box_image);

                    TextView School_number_txtview = (TextView) findViewById(R.id.School_number);
                    School_number_txtview.setText(mSchool_Count + "");


                } else if (v.getId() == senior_people + i) {
                    mSenior_Count = Integer.parseInt(((TextView) v).getText().toString());
                    if (Senior_Bacground != 0) {
                        findViewById(Senior_Bacground).setBackgroundResource(R.drawable.box_image);
                    }
                    Senior_Bacground = v.getId();
                    v.setBackgroundResource(R.drawable.selected_box_image);
                    TextView Senior_number_txtview = (TextView) findViewById(R.id.Senior_number);
                    Senior_number_txtview.setText(mSenior_Count + "");

                }
            }
        }
    };
아래 2개의 Log 를 추가한 뒤 실행결과를 올려주세요

Log.i("seat", "#### First SeatID : " + mSeatID);

void initSeat()
    {
        for (int i = 0; i < 109; i++)
        {

            int seatId = mSeatID + i;

         
            if (seatId != R.id.First_Seat_Layout && seatId != R.id.Second_Seat_Layout && seatId != R.id.Third_Seat_Layout && seatId != R.id.Fourth_Seat_Layout && seatId != R.id.Fifth_Seat_Layout
                    && seatId != R.id.Sixth_Seat_Layout && seatId != R.id.Seventh_Seat_Layout && seatId != R.id.Eigth_Seat_Layout && seatId != R.id.Ninth_Seat_Layout
                    && seatId != R.id.Hundred_Seat_Layout)
            {
               Log.i("seat", "#### Loop Count : " + i + " / seatId : " + seatId );
                mSeat.add(mSeatID + i);
                mSeatView.findViewById(mSeatID + i).setOnClickListener(mOnClickListener);
                mSeatView.findViewById(mSeatID + i).setTag(SEAT_UNSELECTED);      //(빅배스) 좌석이 선택되지 않은 상태값 설정.
            }
        }
    }
말씀하신, 맨 첫줄의 Log.i("seat", "#### First SeatID : " + mSeatID);
 로그 관련해서는, 그대로 써보았는데 에러표시가납니다.

initSeat 부분에 안쪽에  Log.i("seat", "#### Loop Count : " + i + " / seatId : " + seatId ); 는 만들었는데, initSeat() 윗부분에는 Log의 .i 부분에서 빨간줄과 mSeatId에서 빨간줄이 뜹니다.

에러의 사진은 제 원글의 아래쪽에 추가해보았습니다.
mSeatID <-- ID 를 대문자로 바꾸셔야 되요
...;; 굉장히 의아하네요 ..

로그찍는것 마저 질문을 하게 될줄은 정말.. 몰랐었는데

다른 함수부분에서는 Log를 눌렀을때 다른 i라던지, e라던지 다른 함수가 많이 나

오는데 initSeat() 부분에 들어가기 전에, 아래와 같이 써주면, i부분과 mSeatID 부

분에 양쪽 다 에러가 뜨네요 ...

아까 원글의 아래쪽에 올린 사진처럼 말이죠 ... ㅠㅠ
Log.i("seat", "#### First SeatID : " + mSeatID);

위 코드를

void initSeat()  안 첫째줄에다가 넣어주세요

함수 밖에 있어서 그래요
답변 감사드립니다.

말씀하신대로 하니까 첫번째 initSeat들어가고 로그를 찍고 그 아래의
108개의 로그를 전부 다 찍어주었습니다. 그런데 여전히, 버튼을 눌렀을때
꺼지면서  mSeatView.findViewById(mSeatID + i).setOnClickListener(mOnClickListener); 이부분과 initSeat(); 에서 에러가 납니다 ㅠ



12-02 14:07:13.015 31028-31028/ex.real_project I/seat: #### First SeatID : 2131493244

12-02 14:07:13.015 31028-31028/ex.real_project I/seat: #### Loop Count : 0 / seatId : 2131493244
12-02 14:07:13.015 31028-31028/ex.real_project I/seat: #### Loop Count : 1 / seatId : 2131493245
12-02 14:07:13.015 31028-31028/ex.real_project I/seat: #### Loop Count : 2 / seatId : 2131493246
12-02 14:07:13.015 31028-31028/ex.real_project I/seat: #### Loop Count : 3 / seatId : 2131493247
12-02 14:07:13.015 31028-31028/ex.real_project I/seat: #### Loop Count : 4 / seatId : 2131493248
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 5 / seatId : 2131493249
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 6 / seatId : 2131493250
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 7 / seatId : 2131493251
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 8 / seatId : 2131493252
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 9 / seatId : 2131493253
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 11 / seatId : 2131493255
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 12 / seatId : 2131493256
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 13 / seatId : 2131493257
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 14 / seatId : 2131493258
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 15 / seatId : 2131493259
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 16 / seatId : 2131493260
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 17 / seatId : 2131493261
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 18 / seatId : 2131493262
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 19 / seatId : 2131493263
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 20 / seatId : 2131493264
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 22 / seatId : 2131493266
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 23 / seatId : 2131493267
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 24 / seatId : 2131493268
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 25 / seatId : 2131493269
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 26 / seatId : 2131493270
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 27 / seatId : 2131493271
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 28 / seatId : 2131493272
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 29 / seatId : 2131493273
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 30 / seatId : 2131493274
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 31 / seatId : 2131493275
..............................................................

12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 107 / seatId : 2131493351
12-02 14:07:13.025 31028-31028/ex.real_project I/seat: #### Loop Count : 108 / seatId : 2131493352
로그 위치를 아래로 변경한다음 다시 실행결과를 알려주세요

 for (int i = 0; i < 109; i++)
        {

            int seatId = mSeatID + i;

         
            if (seatId != R.id.First_Seat_Layout && seatId != R.id.Second_Seat_Layout && seatId != R.id.Third_Seat_Layout && seatId != R.id.Fourth_Seat_Layout && seatId != R.id.Fifth_Seat_Layout
                    && seatId != R.id.Sixth_Seat_Layout && seatId != R.id.Seventh_Seat_Layout && seatId != R.id.Eigth_Seat_Layout && seatId != R.id.Ninth_Seat_Layout
                    && seatId != R.id.Hundred_Seat_Layout)
            {
                mSeat.add(mSeatID + i);
                mSeatView.findViewById(mSeatID + i).setOnClickListener(mOnClickListener);
                mSeatView.findViewById(mSeatID + i).setTag(SEAT_UNSELECTED);      //(빅배스) 좌석이 선택되지 않은 상태값 설정.
               Log.i("seat", "#### Loop Count : " + i + " / seatId : " + seatId );
            }
        }
말씀하신대로 바꾸고 해보니까, Run()부분에서는 First_seat와 108개의 로그가 전부 나오지만, 안드로이드 모니터의  로그캣의 info에다가 검색해보면, 둘다 로그가 전부 나오지 않습니다.
로그캣에 찍힌 로그를 올려주세요
로그캣에 아무것도 찍히지 않았습니다.
위에 Log 108 개 찍어주신건 뭐죠?   
이상하네요.
위에 로그 찍어주신 것 처럼 다시 찍어주시면 되는데....
Log cat의 다른 탭을 보고 계신것 아니가요?

Logcat > Android Monitor 탭

info : seat
USB 드라이버를 바꿔줄때가 된것 같네요 ..; 계속 문제가 있던 드라이버를 다른것으로 바꾸고 클린프로젝트를 하니까 로그캣이 정상적으로 나왔습니다.

첫번째 로그캣과 I/seat: #### First SeatID : 2131493244

이어서 0~107까지 전부 잘 찍힙니다.

그리고 에러가 뜨는곳으로는  두곳인데 첫째로는
mSeatView.findViewById(mSeatID + i).setOnClickListener(mOnClickListener);   부분에서 " Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                                                                   at ex.real_project.Seat.initSeat "라고 뜹니다.

그리고 두번째는 역시나  initSeat(); 부분에서 에러가 뜹니다 ㅜㅡ  ㅜ
108까지 찍히진 않구요?????
네 107까지 찍힙니다.... for문의 맨 마지막이 109인데 ..
2번 다시 껏다가 켜서 확인해보니 로그의 중간아 아래의 두줄이 포함이 되어 있습니다.
12-02 14:54:57.125 11463-11463/ex.real_project I/seat: #### Loop Count : 89 / seatId : 2131493333
12-02 14:54:57.135 800-2560/? W/ActivityManager:   Force finishing activity 1 ex.real_project/.Seat
12-02 14:54:57.125 11463-11463/ex.real_project I/seat: #### Loop Count : 90 / seatId : 2131493334
12-02 14:54:57.125 11463-11463/ex.real_project I/seat: #### Loop Count : 91 / seatId : 2131493335
12-02 14:54:57.125 11463-11463/ex.real_project I/seat: #### Loop Count : 92 / seatId : 2131493336
12-02 14:54:57.125 11463-11463/ex.real_project I/seat: #### Loop Count : 93 / seatId : 2131493337
12-02 14:54:57.125 11463-11463/ex.real_project I/seat: #### Loop Count : 94 / seatId : 2131493338
12-02 14:54:57.125 11463-11463/ex.real_project I/seat: #### Loop Count : 95 / seatId : 2131493339
12-02 14:54:57.125 11463-11463/ex.real_project I/seat: #### Loop Count : 96 / seatId : 2131493340
12-02 14:54:57.135 800-2560/? W/ActivityManager:   Force finishing activity 2 ex.real_project/.Location_and_Seat
12-02 14:54:57.125 11463-11463/ex.real_project I/seat: #### Loop Count : 97 / seatId : 2131493341
seat_zoom_layout 에 100개의 좌석에 해당하는 TextView는 그대로죠?
하나가 지워졌다거나 한건 아니죠?

하나의  LinearLayout 이 10의 TextView를 포함하고 있는 구조도 그대로고
아 ;;;  지금 seat_zoom_layout을 뒤져보니까  첫째줄의 textview의 id가 좀 이상한걸 발견했습니다.

20~100번째 까지는, 전부 Seat11~Seat20 까지 B1,B2,B3... B10,   Seat21~Seat30까지는 C1,C2...C10 인 경우에 반해서, 가장 맨 첫줄은

Seat_00~Seat_09 까지로써 00부터 A1,A2,A3...A10이 되는 바람에
Seat_10번이 비어있는 상황이라서 한개가 덜찍힌것 같습니다...
좌석이 총 99개라는 말인가요?  헤깔리네요
아.. 혼란스럽게 해서ㅠ  정말 죄송합니다..

총 좌석이 100개는 맞는데, Seat_10라고 하는 id하나가  없을뿐입니다.

원래같으면, 처음에도 01~10 까지 해서 총 10개로 맞추어야 했으나
제가 배열로 생각해서, 00번호부터 시작한것이 화근이 되어서 맨 마지막의
textview의 id가 Seat_10인 부분이 없는것 같습니다.
혹시 소스를 한번 받아보시는것 어떻게 생각하시는지요..?
지금 너무 혼란스러우실꺼 같아서 죄송한마음이 너무 크네요..ㅠㅠ


처음에 00~09 까지 총 10개
그 다음은 11 ~ 20 까지 총 10개
그 다음은 21 ~ 30 까지 총 10개
...
그 다음은 91~ 100 까지 총 10개
네 id 는 첫번째 TextView 의 ID(SEAT_00) 만 코드상에서 사용하기 때문에 상관없습니다.

그럼 문제가 없어야 되는데 왜 마지막 100번째 좌석에서 문제가 발생하는건지 모르겠네요

제가 알지 못하는 무언가 있겠죠~~

그럼 일단 zoomView 부터 해결해야 되니까 108 로 바꾸고 실행해보세요
seat_zoom_layout 에서 100번째 TextView 를 못찾아서 에러가 발생하고 있거든요..
그 부분은 찾아서 해결하셔야 될꺼에요 어딘가 잘못된 부분이 있을꺼에요

소스를 보내고 싶으시면
wildwaves76@gmail.com 으로 프로젝트 디렉토리를 zip 으로 압축하셔서 보내주시구요
오오 ... 말씀해주신대로 해보니까 정말.. 실행이 됩니다.. ㅠ ㅠ

그런데, 원래 미니맵 부분에 현재 위치시킨 100개의 텍스트뷰의 대한 그림이

축소되어서 나올것으로  생각했는데 라이브러리를 다시 찾아보니까

그냥 검은화면이고, 줌을 할 경우에 미니맵 이 얼마나 확대가 되는지 알려주는 정

도로 사용이 되었네요.

와 ㅠ ㅠ이 얼마나 .. 여기저기 테스트 하고, 코드를 좀 추가하는데 답변을

이제 보았습니다.

108로 바꾸고 실행을 해보니까, 정상적으로 에러없이 실행이 잘 되었습니다ㅠ
에러만 안나게 한거지 정상적으로 실행되는것은 아닙니다.
좌석 중 1개는 클릭이 안될꺼에요 (첫번째나 마지막 좌석)
네 말씀하신것처럼, 첫번째는 별 무리없이 되지만..

마지막 좌석이 클릭이 안되네요..

아니면 좌석에 대한 번호지정을, Seat_00번 부터가 아닌, 처음부터

다시 다 번호를 밀어주는건 너무 비효율적인 방법인것 같으신가요?
번호를 다시 밀어주는게 정확히 뭔지는 모르겠지만
잘 돌아가던 코드였기 때문에 수정중에 고쳐진 잘못된 코드를 찾으셔야 되요~

다시 109로 바꾸신 다음 에러가 나지 않도록 개선해야 됩니다.

개발에서 디버깅 능력은 굉장히~~!!!!  중요합니다.
답변 감사드립니다..

혹시 제가 의심가는 부분을, 한번 적어보았는데 한번 읽어주시고 이게 제데로된

생각인지 검토 한번 부탁드립니다




일단.. for문을 109번으로 바꾸고 다시 실행을 해보니까, 맨 처음과 맨 끝이 잘 찍히는 과정을 확인을 했습니다..

그런데, 제가 이해한 바가 맞는지 모르겠습니다.

생각의 끝에 도달을 해서 아래에 한번 생각한바를 말로 풀어서 적어보려고 합니다.




원래대로라면, 리니어 10개, 안쪽의 텍스트뷰가 100개여서  

for문이 총 110개가 되어야 하지만, 처음 좌석의 값을 아래와 같이 초기화 하므로 for문이 109개가 되어도 무방합니다.

int mSeatID = R.id.Seat_00;

그래서 for문이 for (int i = 0; i < 109; i++),  0~108까지 돌게 되므로(총 109개) 무리없이 잘 동작을 합니다.

그리고 아래는 리니어 레이아웃과, 안쪽의 좌석의 수 입니다.

Seat 00~ 09 까지 10개
Seat 11~ 20 까지 10개
Seat 21~ 30 까지 10개
Seat 31~ 40 까지 10개
Seat 41~ 50 까지 10개
Seat 51~ 60 까지 10개
Seat 61~ 70 까지 10개
Seat 71~ 80 까지 10개
Seat 81~ 90 까지 10개
Seat 91~ 100 까지 10개


그런데, 여기서 이상한 점은 Seat_10번은 빠져있는데 이부분에 대해서는

두번째 줄부터 ~ 9번째줄 까지는 B1,C1,D1의 시작ID번호가 11인데

첫번째 시작번호 같은 경우에는 0번으로 시작을 해서 9번으로 끝나서,  마지막 번호가 빠지게 됩니다.

하지만 그래도 정상적으로 109로 지정을 했을시에 실행이 되는 이유는 아래의 소스에서

 for (int i = 0; i < 109; i++)
        {

            int seatId = mSeatID + i;

            // $$ 레이아웃에 대한것은, 빼야함 오로지 좌석부분만 되도록
            if (seatId != R.id.First_Seat_Layout && seatId != R.id.Second_Seat_Layout && seatId != R.id.Third_Seat_Layout && seatId != R.id.Fourth_Seat_Layout && seatId != R.id.Fifth_Seat_Layout
                    && seatId != R.id.Sixth_Seat_Layout && seatId != R.id.Seventh_Seat_Layout && seatId != R.id.Eigth_Seat_Layout && seatId != R.id.Ninth_Seat_Layout
                    && seatId != R.id.Hundred_Seat_Layout)
            {


                mSeat.add(mSeatID + i);
                mSeatView.findViewById(mSeatID + i).setOnClickListener(mOnClickListener);
                mSeatView.findViewById(mSeatID + i).setTag(SEAT_UNSELECTED);      //(빅배스) 좌석이 선택되지 않은 상태값 설정.

                Log.i("seat", "#### Loop Count : " + i + " / seatId : " + seatId );
            }
        }


seatid의 값이 레이아웃에 대한 비교를 거치는 부분을 확인 했기 때문이고, 이부분과 관련이 있다고 생각했는데.. 여기서 생각이 ..뚝 끊기네요..
우선,,, 109 로 해도 에러없이 잘 실행된다는 것인가요?
그럼 다행이네요

SEAT_00, SEAT_01, SEAT_02 ~ SEAT_100  이건 TextView id 의 이름일 뿐입니다.
이름은 Kind 님이 알아보기 쉽게 어떻게 지어도 프로그램 구동에 영향을 미치지 않습니다.

프로그램이 Compile 되면 TextView  의 id 값은 Integer 로 변환됩니다.
그렇기 때문에 이름을 어떻게 지어도 상관없습니다. 프로그램은 변환된  Interger 값을 참조하게 되니까요.
어려우시죠? 아주 조금씩 알아가다 보면 어느순간 확~~~~ 옵니다.
개발 실력도 아주 천천히 늘다가 어느순간 확~~~~ 하고 늘어요
너무 답답해하지 마세요
답변 정말 감사드립니다..

나름대로 분석을 하는데도 참.. 빅배스님이 대단하심을 느끼네요 ..

제가 나름대로 해석을 해보았는데.. 이제 어느정도 퍼즐이 맞춰 지는 느낌이

들어서 한번 글로 작성해 보았습니다..


Seat 부분에 있어서 한번 정리해보았는데 이해하는 과정속에서

모르는부분도 살짝 있어서 여쭤보고자 합니다. 이전 글에서

" SEAT_00, SEAT_01, SEAT_02 ~ SEAT_100  이건 TextView id 의 이름일 뿐입니다.
프로그램이 Compile 되면 TextView  의 id 값은 Integer 로 변환됩니다.
그렇기 때문에 이름을 어떻게 지어도 상관없습니다. 프로그램은 변환된  Interger 값을 참조하게 되니까요 " 라고

말씀을 하셨는데, 이부분에 있어서 약간 이해가 안가는 부분이 있습니다.

처음에 성인과, 학생, 우대를 입력받는 부분에 있어서, 아래와 같이 변수를 초기화를 했습니다.

    int adult = R.id.Adult_Seat_00;
    int school_people = R.id.School_Seat_00;
    int senior_people = R.id.Senior_Seat_00;


// [1번질문] adult 에다가 R.id.Adult_Seat_00 부분은, 첫 텍스트뷰의 id값인데 그렇다면 아래의 adult에는 9개로 구성된
        textview의 첫번째 주소가 들어가는것인가요? 마찬가지로 R.id.Adult_Seat_01 일때는 textview의 두번째
         주소가 어떤 형식으로 들어가는지 궁금합니다.



그리고 init함수를 통해서 아래와 같이, 모든 9개의 텍스트뷰에 온클릭 리스너를 달아주었습니다.

 for (int i = 0; i < 9; i++) {
            findViewById(adult + i).setOnClickListener(mOnClickListener);
            findViewById(school_people + i).setOnClickListener(mOnClickListener);
            findViewById(senior_people + i).setOnClickListener(mOnClickListener);
  }


그리고 온클릭이벤트를 통해서, 선택한 텍스트뷰의의 1,2,3 이라고 지정되어 있는 text를 Integer 형식으로

바꾸어서, 카운트에 저장하는 것 까지 이해하였습니다.

 for (int i = 0; i < 9; i++) {

                if (v.getId() == adult + i) {
                    mAdult_Count = Integer.parseInt(((TextView) v).getText().toString());

                    if (Adult_Bacground != 0) {     
                        findViewById(Adult_Bacground).setBackgroundResource(R.drawable.box_image);
                    }

                    v.setBackgroundResource(R.drawable.selected_box_image);      
                    Adult_Bacground = v.getId();

                    TextView Adult_number_txtview = (TextView) findViewById(R.id.Adult_number);
                    Adult_number_txtview.setText(mAdult_Count + "");

                }


그리고 좌석은 오른쪽과 같이 정의가 되어 있습니다. int mSeatID = R.id.Seat_00;     // 첫번째 좌석 ID값

그리고 아래에 정의된 initSeat()에서 seatId값에 첫번째 텍스트뷰의 주소(?)가 들어가게 되고, 109개까지 비교를 하고

좌석에 대한 부분만, 어레이리스트인 mSeat에 다 저장을 합니다.


< 바로 아래의 세줄(initSeat 윗부분까지)은 oncreate윗부분에 선언한 전역변수 >

ArrayList<Integer> mSeat = new ArrayList<>();  // 좌석정보를 담는 어레이리스트

int mSeatID = R.id.Seat_00;     // 첫번째 좌석 ID값

private View mSeatView;



 void initSeat()
    {
        for (int i = 0; i < 109; i++)
        {

            int seatId = mSeatID + i;

            // $$ 레이아웃에 대한것은, 빼야함 오로지 좌석부분만 되도록
            if (seatId != R.id.First_Seat_Layout && seatId != R.id.Second_Seat_Layout && seatId != R.id.Third_Seat_Layout && seatId != R.id.Fourth_Seat_Layout && seatId != R.id.Fifth_Seat_Layout
                    && seatId != R.id.Sixth_Seat_Layout && seatId != R.id.Seventh_Seat_Layout && seatId != R.id.Eigth_Seat_Layout && seatId != R.id.Ninth_Seat_Layout
                    && seatId != R.id.Hundred_Seat_Layout)
            {


                mSeat.add(mSeatID + i);
                mSeatView.findViewById(mSeatID + i).setOnClickListener(mOnClickListener);
                mSeatView.findViewById(mSeatID + i).setTag(SEAT_UNSELECTED);    

            }
        }
    }



<아래는 onclick의 100개의 좌석에 대한 부분만 떼어놓은 위쪽 부분의 소스입니다.>
100개의 좌석에 대한 온클릭 이벤트로써 선택한 좌석과 어레이리스트에 저장된 좌석의 아이디가 같고 태그값에 선택되지 않고

총 토탈예매한 개수보다 작다면, 선택시 배경을 바꿔주고, 태그값에 선택된 변수를 따로 넣고,

선택된 카운트를 올리는 기능으로 이루어져 있음을 이해했습니다.


View.OnClickListener mOnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (mSeat.contains(v.getId())) {     // mSeat 에 v.getId()의 키값으로 저장된 value 가 있는지 확인
                // 즉 텍스트뷰를 클릭한건지 판단하는 조건문


                if((int)v.getTag() == SEAT_UNSELECTED) {     
                    if(mSelectedSeatCount < getTotalCount()) {  
                        v.setBackgroundResource(R.drawable.selected_box_image);
                        v.setTag(SEAT_SELECTED);         
                        mSelectedSeatCount += 1;      

                    }else{                                  // 선택할 수 있는 좌석수가 없으면 Toast 로 안내
                        Toast toast = Toast.makeText(Seat.this, "더 이상 좌석을 선택할 수 없습니다.", Toast.LENGTH_SHORT);
                        toast.setGravity(Gravity.CENTER, 0, 0);
                        toast.show();
                    }

                }else{                                  // 이미 선택된 좌석이면
                    v.setBackgroundResource(R.drawable.box_image);
                    v.setTag(SEAT_UNSELECTED);
                    mSelectedSeatCount -= 1;        // (빅배스) 선택한 좌석 수 제거
                }
                return;
            }




그리고 마지막으로 선택완료 버튼의 온클릭 이벤트 부분입니다. for문은 어레이리스트만큼의 size로 구성되어 있고,

좌석의 텍스트(A1열,B1열...)를 인텐트로 넘겨줘서 텍스트뷰에서 받아야 하니까 (Textview)로 형변환해서 tv로 받고있고,

앞서 tv의 settag에 넣어놓았던 값을 비교해서 선택된 것이 선택되었다면 그 정보만 인텐트로 넘기는 구문입니다.


  int idx=0;
                    for (int i=0; i < mSeat.size (); i++) {

                        TextView tv = (TextView) mSeatView.findViewById(mSeat.get(i));

                        if ((int)tv.getTag () == SEAT_SELECTED){
                            intent.putExtra ("seat" + idx, tv.getText().toString());
                            idx++;
                        }
                    }

                    startActivity(intent);
하나씩 답변을 할께요

// [1번질문] adult 에다가 R.id.Adult_Seat_00 부분은, 첫 텍스트뷰의 id값인데 그렇다면 아래의 adult에는 9개로 구성된
        textview의 첫번째 주소가 들어가는것인가요? 마찬가지로 R.id.Adult_Seat_01 일때는 textview의 두번째
         주소가 어떤 형식으로 들어가는지 궁금합니다.



그리고 init함수를 통해서 아래와 같이, 모든 9개의 텍스트뷰에 온클릭 리스너를 달아주었습니다.

 for (int i = 0; i < 9; i++) {
            findViewById(adult + i).setOnClickListener(mOnClickListener);
            findViewById(school_people + i).setOnClickListener(mOnClickListener);
            findViewById(senior_people + i).setOnClickListener(mOnClickListener);
  }


>> 답변 다행히 연속으로 된  View 들의  id 값 역시 연속으로 생성되기 때문에 위의 코딩 방식이 가능합니다.

>> 위  for 문은 9번을 돌면서 i 값을 0 ~ 8 까지 증가시킵니다.
그러면
adult + 0
adult + 1
adult + 2
...
adult + 8
까지 for문이 돌면서 해당하는 id 에 대한하는 View 를 찾게되겠죠
하나 답변하고 쭉 읽어 보니 다음 질문이 없네요...
나머지는 잘 이해하고 계신 것 같아 보이네요^^
ㅜ_ ㅜ 감사합니다. 덕분에, 계속 코드를 보면서도 놀랍네요 ..
진짜 누가 키보드를 잡냐에 따라 이렇게도 달라질수 있다는걸 다시한번
느낍니다.


한가지 더 여쭤보고자 합니다 ㅠ ㅠ

줌 관련해서, 아래의 블로그에 있는 곳에서 링크해준곳에서

라이브러리를 가져와서  사용했다고 말씀을 드린적이 있습니다.

그런데, 아래의 링크를 들어가보시면, 화면에 안드로이드로봇의 그림이 있고

검은색 미니맵에서는 확대하고 축소할때의 크기가 달라집니다.

그런데, 이 검은색의 배경화면을 현재 100개의 텍스트뷰의 화면이 나타나게 하

고 싶은데..zoomView 라이브러리 관련해서,  찾아보는데 검은색 미니맵의

배경에 대해서 지정을 해주고 싶은데 혹시 그 방법을 아시나요..?

http://m.blog.naver.com/tkddlf4209/220734280748

zoomview.set 으로 시작하는 모든 부분을 다 찾아봐도, 인자값에 layout을
받는것은 없고.. 줌뷰 관련해서 구글에서 찾아봐도,, 있는 블로그가 2~3개밖에
없네요.. 흑
빅베스님 제가 원글의 아래쪽에 제가 만들고자 하는 사진에 대해서 한번
올려보았습니다. 왼쪽 상단의 검은색 미니화면에, 텍스트뷰에 대한 그림이
어느정도 나와있길래.. 저도 저렇게 구현을 하고 싶은데 줌뷰 관련해서 찾아보아도 미니맵에 액티비티를 표현하는게 쉽게 나오질 않네요 ..

제가 잘 못찾는건지.. 아니면 정보가 없는건지.. (그럴리는없겠지만..ㅜㅡ ㅜ)

저는 최대한 똑같은 라이브러리를 발견했다고 생각했는데 그게 아닌건가
싶기도 하네요 ..

제가 사실 제가 쓴 글 원본의 아래쪽에 있는 사진을 보고 목표로 삼아서
만들고 있었는데 확대도 되고, 미니맵도 뜨는데 화면에 저 액티비티를
못띄워서 단순히 확대밖에 안되네용.. 으흑흑

좀 더 찾아보다가 정 안된다면..

그냥 확대로라도 쓰던지 아니면 다른 라이브러리를 찾아보아야 할것같은데..

여기저기 물어보았지만 라이브러리에 대해서 제가 이번에 처음 적용을

시켜보는거라서, 그래도 좋은 경험이 되었어용 ㅋㅋ

도움을 많이 받았지만 그래도 거의 가까워져 간다고 생각했었는데,,

기존의 좌석들의 이미지를 크게 만들어서, 위의 사진과 같이

넓고 큼지막하게 할텐데 쫌 아쉽네염ㅜ
빅배스님 ㅠ  뭐좀 하나 여쭤보아도 될까용 ㅜ ㅜ
아무래도 Kind 님이 찾은 라이브러리로는 안될것 같네요
아쉬워도 일단 그정도로 만족하셔야 될 것같습니다.
아..물론 질문하세요~~ ㅎ
네 ㅠ 몇날며칠 찾아봐도, 그냥 확대되는 기능으로만 마무리 지으려고 합니다.

궁금한점이 .. 다름이 아니라 , 제가 원글의 아래쪽에 사진을 달아 보았는데..

2번째 사진에서 보면, 맨 위쪽의 툴바에 보면, 일반0, 청소년3, 우대2 가

나타납니다. 이 툴바가, 첫번째 화면에서 눌렀던것이 나타나고 선택완료를

누르게 되면, 뒤쪽에 가장 위쪽에 나타나는데, 이 부분이 첫번쨰 화면에서

맨위쪽에도 나타나게 하고 싶은데 그 방법을 모르겠습니다.

첫 화면에서 입력받는 부분의 시작부터 선택완료 버튼 부분까지는 아래와

같습니다.

일반과 청소년, 우대로 포함된 텍스트뷰의 xml 아래와 같고

<RelativeLayout
        android:id="@+id/choiii"
        android:background="#77000000"
        android:layout_width="match_parent"
        android:visibility="visible"
        android:layout_height="match_parent">


선택완료로 끝나는 부분은 아래와 같습니다.

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:paddingTop="40dp"
            android:background="#ffffff"
            android:layout_below="@+id/Senior_Layout">

            <Button
                android:id="@+id/Selection_Success"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="선택완료"
                android:background="#c300ff"
                android:textColor="#ffffff"
                />

        </LinearLayout>


그리고, 선택완료를 누르게 되면 시작부분의 choiii 부분이 Visibility가

gone이 되어 사라집니다.

그리고 선택완료를 누르게 되고 난 화면의 맨 위쪽에 있는 툴바의 소스는ㅠ 아래와 같습니다.

스크롤뷰 아래 아래에 있는 Seat_ToolBar 부분인데.. 어떻게 해야, 앞쪽의 화면에도 나타나게 할 수 있을까요 ..ㅠ




<ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RelativeLayout
            android:id="@+id/Before_ScrollView_RelativeLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <RelativeLayout
                android:id="@+id/Seat_Toolbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp">

                <ImageView
                    android:id="@+id/Seat_Before_Image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="3dp"
                    android:layout_marginLeft="3dp"
                    android:background="@drawable/before_image" />

                <TextView
                    android:id="@+id/Adult_number"
                    android:text="0"
                    android:layout_marginLeft="100dp"
                    android:textSize="25dp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />

                <TextView
                    android:id="@+id/Adult_textview"
                    android:layout_below="@+id/Adult_number"
                    android:layout_width="wrap_content"
                    android:text="일반"
                    android:layout_marginLeft="90dp"
                    android:textSize="15dp"
                    android:layout_height="wrap_content" />
<TextView
                    android:id="@+id/School_number"
                    android:text="0"
                    android:textSize="25dp"
                    android:layout_marginLeft="200dp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />

                <TextView
                    android:id="@+id/School_textview"
                    android:layout_below="@+id/School_number"
                    android:layout_width="wrap_content"
                    android:text="청소년"
                    android:textSize="15dp"
                    android:layout_marginLeft="180dp"
                    android:layout_height="wrap_content" />

                <TextView
                    android:id="@+id/Senior_number"
                    android:text="0"
                    android:textSize="25dp"
                    android:layout_marginLeft="300dp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />

                <TextView
                    android:id="@+id/Senior_textview"
                    android:layout_below="@+id/Senior_number"
                    android:layout_width="wrap_content"
                    android:text="우대"
                    android:textSize="15dp"
                    android:layout_marginLeft="290dp"
                    android:layout_height="wrap_content" />


            </RelativeLayout>

            <RelativeLayout
                android:id="@+id/screen_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/Seat_Toolbar"
                android:orientation="horizontal"
                android:layout_marginTop="10dp"
                android:background="@drawable/screen">

            </RelativeLayout>

            <RelativeLayout
                android:id="@+id/entrance_layout"
                android:layout_below="@+id/screen_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <ImageView
                    android:id="@+id/right_entrance"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="@drawable/entrance"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentRight="true"
                    android:layout_alignParentEnd="true" />

                <ImageView
                    android:id="@+id/left_entrance"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="@drawable/entrance"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true" />

            </RelativeLayout>


            <RelativeLayout
                android:id="@+id/seat_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>



            <LinearLayout
                android:id="@+id/Handicapped_Layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="60dp"
                android:paddingTop="10dp"
                android:paddingBottom="10dp"
                android:background="#ff8400"
                android:layout_below="@+id/seat_layout"
                android:orientation="horizontal">

                <ImageView
                    android:id="@+id/Check_Box_Img"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="20dp"
                    android:background="@drawable/box_image"/>

                <TextView
                    android:id="@+id/General_Seat_textview"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="25dp"
                    android:textStyle="bold"
                    android:layout_marginLeft="20dp"
                    android:text="일반석"/>


                <ImageView
                    android:id="@+id/Handicapped_Check_Box_Img"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="20dp"
                    android:background="@drawable/handicapped_checkbox_img"/>

                <TextView
                    android:id="@+id/Handicapped_Seat_textview"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="25dp"
                    android:layout_marginLeft="20dp"
                    android:textStyle="bold"
                    android:text="장애인석"/>

            </LinearLayout>

            <LinearLayout
                android:id="@+id/Seat_Pay_Layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/Handicapped_Layout"
                android:weightSum="4"
                android:background="#00000000"
                android:orientation="horizontal">

                <TextView
                    android:id="@+id/Seat_Pay_Money"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:layout_marginLeft="10dp"
                    android:text="결제 금액"/>


                <TextView
                    android:id="@+id/Total_Movie_Money"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="20dp"
                    android:layout_weight="2"
                    android:textSize="20dp"
                    />


                <Button
                    android:id="@+id/Seat_SelectionAccess_Button"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:background="#7b00ff"
                    android:text="선택완료"/>

            </LinearLayout>

        </RelativeLayout>

    </ScrollView>
...