반응형

2021년 01월 28일 목요일의 I에게

 

공부를 시작한지 벌써 3주나 지났어.

피로가 누적되서 오늘은 특히나 많이 힘들지?

잠깐이지만, 그 와중에도 공부를 조금이나마 하고 자는 것을 칭찬해. 잘했어.

 

지난 3주간 필요한 각각의 Activity를 대충 구성한 것 같아.

이제 화면간 파라미터 연동과 Data들 작업을 해서 기능을 마무리하고,

디자인 및 소스 최적화 등을하면 이번 셀프-프로젝트도 마무리 될 것 같아.

얼마 안남았으니 집중해서 퐈이팅 해보자.

 

[검색] Activity에서 RecyclerView를 이용해서 목록을 조회는 해왔어.

이제 목록으로 조회된 각 항목들을 클릭했을 때, [상세] Activity로 정보를 넘겨 줘야해.

그래야 [상세] Activity에서 넘겨받은 키값으로 상세정보를 보여줄 수 있을 테니까.

 

RecyclerView의 항목을 클릭했을 때 이벤트를 발생시키는 Listener를 Adapter에 선언하는 것 까지는 했어.

이제 이 클릭된 RecyclerView를 [상세] Activity로 넘겨보자.

 

    static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView txtObjNm;
        TextView txtObjId;
        ItemSearch item;

        public ViewHolder(View itemView) {
            super(itemView);

            txtObjId = itemView.findViewById(R.id.txtObjId);
            txtObjNm = itemView.findViewById(R.id.txtObjNm);
        }

        @Override
        public void onClick(View v) {

            switch( v.getId() ) {
                case R.id.txtObjNm :
                    // Item클릭시 수행되는 Listener영역
                    break;
            }
        }

        public void setItem(ItemSearch item ) {
            txtObjId.setText( item.getStrObjId() );
            txtObjNm.setText( item.getStrObjNm() );

            txtObjNm.setOnClickListener(this);
        }
    }

[소스] Adapter에 선언한 Listener

 

Activity에서 Activity로 전환하기 위해서는 뭐가 필요하다고 했지?

맞아. 인텐트intent 객체야.

그런데 단어는 기억나는데 개념이랑 문법syntax가 하나도 기억 안나지? 나도 난감해. OTL

 

            switch( v.getId() ) {
                case R.id.txtObjNm :
                    Intent intent = new Intent( v.getContext(), InfoActivity.class);
                    
                    intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
                    intent.putExtra( "OBJ_ID", txtObjId.getText() );
                    
                    context.startActivity(intent);

                    break;
            }

[소스] Intent로 Activity 전환하기

 

그런데, [상세] Activity에서 조회할 함수의 키값도 파라미터로 넘겨야돼.

파라미터를 넘길 떈? 맞아 Intent.putExtras() 였어. 부가정보를 Intent 담아서 넘기면 돼.

어! 그런데, 왜 오류가 나지? 

무슨 "FLAG_ACTIVITY_NEW_TASK" flag를 선언하라는 거 같은데...

이럴 때면, 영어 공부 좀 해야하는 하는 생각을 해. 그렇지?

지.알.못 이지만 오류메시지가 flag를 선언하라는 거 같아. 모를 떈? googling ㄱㄱ

 

                    intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );

[소스] FLAG_ACTIVITY_NEW_TASK,  flag 지정

 

자, 클릭한 항목을 [상세] Activity로 넘겼어.

그럼, 이제 [상세] Activity에서 파라미터를 받아서 처리하도록 소스를 변경해야겠지?

[상세] Activity를 고쳐 봅시다.

 

OnCreate 시점에, 파라미터를 확인해서 넘어온 파라미터가 있으면 처리를 하고, 넘어온 파라미터가 없으면 종료하면돼.

[상세] Activity는 선택된 항목의 상세정보를 조회하는 기능 외에는 없으니까.

나~~~~중에 등록된 정보를 수정할 수 있게 한다면, 그 때는 기능을 추가해야 될지도...?!

 

        Intent intentIn = getIntent();

        if( intentIn.getExtras() != null ) {
            if( intentIn.getExtras().containsKey( "OBJ_ID" ) ) {
                strInObjId = intentIn.getExtras().get( "OBJ_ID" ).toString();
            }
        }

[소스] 전달된 파라미터 확인 및 수신하기

 

자, 전달받은 정보를 이제 쿼리의 파라미터로 넘겨주면 돼.

쿼리의 파라미터는 Java의 preparedStatement처럼 '?'를 이용해서 넘겨.

그리고 호출하는 database.rawQuery()의 두번째 파라미터에 배열형태로 넘길 수 있어.

소스처럼 new String[]{ 파라미터, ... }로 넘겨주면 돼.

그런데 숫자형을 넘길때는 어떻게 하지? @_@;;  일단, 이건 다음에 알아보기로... OTL

 

자, 파라미터까지 쿼리에 넘겨주도록 수정하고 실행을 뙁! 하니...?

어때? 동일한 결과가 나왔지? 잘했어. 다행이다.

 

새삼 느끼는 거지만, 인터넷에는 정말 자료가 많다는 생각을 하게 돼.

검색하면 어떤식으로든 대부분 찾을 수 있으니까.

정보가 많다보니 정확한 정보를 찾는데 시간과 노력이 좀 필요하지만..

그래도 이게 어디야? 이렇게 인터넷이 있으니 독학도 가능한거니까.

 

아직 할 것들이 많이 남았지만, 오늘은 많~이 피곤하니 이 정도면 된것 같아.

푹~ 자고 내일도 달려봅시다.

 

Good night.

 

반응형