2011년 1월 7일 금요일

[Android] View in Tag (View의 Tag활용 법)

 

 

 

 

 

 

Holder Pattern 사용하면서 알게된 Tag..이럴수가..

나는 그동안 뭘 하고 있었던가...........싶네요..

다음 부터는 태그를 많이 사용해야겟어요 !! -_ -v

 

 

[Intro]

 

오늘은 별거 아닌 팁 하나 포스팅 해봅니다.
정말 별거 없답니다. 아하하...

 


[Data in View]

 

가끔 어플리케이션을 만들다 보면 View안에 어떤 데이터를 집어 넣고 싶을 때가 종종 있습니다.
네... 있지요. 그런 경우 그냥 무작정 떠올릴 수 있는 방법은 extends 해버리는 겁니다.
OOP의 최대 장점이지요.

 

Id, Name, Address 세개의 정보를 View안에 담고 싶다고 한다면
아마 다들 아래와 같이 클래스를 만드실 겁니다.

 


public class CustomView extends View {
   
    private int mId;
    private String mName;
    private String mAddr;

 

    public CustomView(Context context) {
        super(context);
    }

    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
   
    public int getId() { return mId; }
    public void setId(int id) { mId = id; }
   
    public String getName() { return mName; }
    public void setName(String name) { mName = name; }
   
    public String getAddress() { return mAddr; }
    public void setAddress(String addr) { mAddr = addr; }
   
}

 


별로 복잡하지 않은 구조입니다.
달랑 필드 세개에 get / set 메소드 하나씩 달려 있는 모양이지요.
사용법은 아래와 같이 그냥 get / set 메소드를 사용 하면 되는 겁니다.

 


CustomView customView = new CustomView(this);
customView.setId(1);
customView.setName("vizpei");
customView.setAddress("somewhere");

 


이와 같은 방법은 단순히 get/set 만 하지 않고 뭔가 좀더 복잡한 operation을 하는 경우에
아주 유용하게 쓰는, 그냥 평범하게 생각 할 수 있는 customization 이지요.

 


[Tag in View]

 

android.view.View, 즉 모든 View들의 상위에 있는 View 클래스에는
getTag() / setTag() 를 사용하여 View에 Tag를 붙일 수 있습니다.
Tag는 Object 타입이라 아무거나 다 들어 갈 수 있지요.
그냥 시시한 값 하나 넣을 수도 있지만 복잡한 클래스 인스턴스도 가볍게 넣을 수 있습니다.

 

아까 넣고 싶었던 데이터들을 일단 하나의 클래스로 만들어 봤습니다.
필드를 private로 만들고 get / set 메소드 만들어도 되지만 그냥 public으로 해버렸습니다.
어차피 그냥 데이터 저장용이니까요.

 


private class PersonInfo {
    public int id;
    public String name;
    public String addr;
}

 


이제 PersonInfo 인스턴스를 만들고 View.setTag()로 집어 넣어주면 땡입니다.

 


PersonInfo pi = new PersonInfo();
pi.id = 1;
pi.name = "vizpei";
pi.addr = "somewhere";
       
View view = new View(this);
view.setTag(pi);

 


사용할때는 View.getTag() 로 가져오면 역시 땡이지요.

 


PersonInfo pi = (PersonInfo) view.getTag();

 


알면 유용하게 쓸 수 있지만, 모르면 맨날 extends만 하고 있을지는 모르는 일입니다.

 


[Appendix]

 

뭐 별로 쓴적은 없지만...
View.findViewWithTag() 를 사용하면 Tag로 View를 찾을 수 있답니다.
View.findViewById()로만 View를 찾을 수 있는건 아니란 것이지요.

 

다만 View.findViewWithTag()는 Object.equals() 비교를 하니
요것만 주의해서 사용 하시면 될 것 같습니다.

 

 

 

 

[출처] - http://blog.vizpei.kr/86999387

 

 

 

 

 

 

 

댓글 없음:

댓글 쓰기