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

커스텀 리스트 뷰에서 커스텀 뷰에 이벤트를 구현하고싶습니다.

0 추천
안녕하세요.

정말 초보 개발자입니다.

커스텀 뷰를 이용해서 리스트뷰를 정의하는 것 까진 되었습니다.

그런데 애초에 생각이 잘못된 것인지, 아닌지 궁금해서 이렇게 질문을 올렸습니다.

대부분 서적이나 인터넷 상 예제들도, 커스텀 리스트 뷰를 구현할 때

<커스텀 뷰 부분을 텍스트뷰1, 버튼 1 로 구성되었다는 가정하에>

대부분 어댑터를 상속받아 getview 쪽에서 이벤트 리스너를 구현하시는 것 같습니다.

 

저는 이런 방법이 아니라, 텍스트뷰1, 버튼1 을 정의한 액티비티에서 버튼 클릭 리스너를 구현해놓고,

이를 리스트 뷰로 뽑아주며, 버튼을 눌렀을 때, 커스텀 뷰에 구현해놓은 이벤트를 타게 하고 싶습니다.

 

즉,

A : 텍스트뷰, 버튼1, 버튼 리스너 구현

B: A의 커스텀뷰를 뿌려준다.. getview를 오버로딩하는 화면.

 

B에 getview에서 정의한 리스너 이벤트가 아닌, A 에 정의한 리스너 이벤트를 태우고싶은것이죠..

 

이 생각 자체가 잘못된 건가요? 생각같아선, A에서 구현해놓으면 B에서 각 항목의 버튼을 클릭했을 때, A 쪽 이벤트가 탈 것이라고 생각했습니다만..

 

오류가 있다면 조언좀 부탁드립니다..ㅠ

 

감사합니다.
용구리 (120 포인트) 님이 2013년 12월 9일 질문

1개의 답변

0 추천

B에 getView에서 정의한 리스너 이벤트라는게 정확히 이해하기가 어렵네요.

원하시는게 텍스트뷰와 버튼을 포함한 한줄전체에서 이벤트가 발생하는게아니고 

버튼에서만 이벤트가 발생하게 하고싶으신거면 

getView에서 버튼을 가져와서 버튼에만 클릭 리스너를 주시면 됩니다  ' ' ;

	public View getView(final int position, View convertView, ViewGroup parent) {
		View v = convertView;
		if (v == null) {
			LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			v = vi.inflate(R.layout.list_layout, null);
		}
		temp = item.get(position);

		if (temp != null) {
			Button btn = (Button)v.findViewById(R.id.btn);
			btn.setOnClickListener(new OnClickListener() {
						
				@Override
				public void onClick(View v) {
					// TODO Auto-generated method stub
					//이벤트 처리
				}
			});

 

 

얼룩돼지 (15,720 포인트) 님이 2013년 12월 9일 답변
안녕하세요 얼룩돼지님. 답변에 감사드립니다.
저도 위와같이 구현하는 방법을 써서 하긴 했는데,
제가 정말 원하는 형식은 커스텀뷰를 디자인한, 즉 A.java에서 버튼 리스너를 구현하고, 이 커스텀 뷰가 적용된 리스트뷰에서 버튼을 클릭하면 A.java에 구현해놓은 리스너가 응답하는 형식이 되는지를 여쭈어본것입니다.
즉, 커스텀 뷰에서 디자인도하고, 버튼의 이벤트까지 구현하고, B.java에서는 그것을 가져다 붙여만 넣은것이구요...

제가 설명하는 것이 안드로이드 이론적으로 가능한 것인지요...?ㅠ
new OnClickListener() {
                     
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //이벤트 처리
            }
        } 이 부분을 분리하고 싶다면..이리스너를 객체로 만들고 adapter에 전달해주고 getview에서 setonclicklistener(전달받은 객체); 해주면 될것 같네요.
...