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

커스텀뷰의 체크박스 클릭 이벤트처리..

0 추천
커스텀 뷰를 사용중이고 커스텀어댑터에 아래소스와 같이 getView를 만들었는데 view.findViewById(R.id.dicisionBtn)에서 Null이 나옵니다. dicisionBtn은 해당 리스트뷰를 포함하는 뷰에 있기때문에, Null이 나오는 이유는 이해는 갑니다만,, 그렇다면 여기서 어떤 방식으로 체크가 됬을때의 이벤트 처리를 통해 버튼의 활성화 유무를 제어 할 수 있을까요??
 
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MonitorItemListView monitorItemListView = null; 
view = convertView;
 
if(view == null) {
view = LayoutInflater.from(mContext).inflate(R.layout.listview_monitor_item_list, parent, false);
monitorItemListView = new MonitorItemListView(view);
view.setTag(monitorItemListView);
}
 
monitorItemListView = (MonitorItemListView) view.getTag();
 
MonitorBean MonitorItemData = (MonitorBean) getItem(position);
 
if(MonitorItemData != null) {
monitorItemListView.GetArticle().setText(MonitorItemData.getArticle());
monitorItemListView.GetUnit().setAdapter(MonitorItemData.getUnit());
 
monitorItemListView.GetViewCheckedItem().setOnCheckedChangeListener(new OnCheckedChangeListener() {
 
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
view.findViewById(R.id.dicisionBtn).setEnabled(true);
view.findViewById(R.id.dicisionBtn).getBackground().setColorFilter(null);
} else {
view.findViewById(R.id.dicisionBtn).setEnabled(false);
view.findViewById(R.id.dicisionBtn).getBackground().setColorFilter(Color.GRAY, Mode.MULTIPLY);
}
}
});
monitorItemListView.GetGraphCheckedItem();
monitorItemListView.GetRangeMin().setText(MonitorItemData.getRangeMin());
monitorItemListView.GetRangeMax().setText(MonitorItemData.getRangeMax());
}
 
return view;
}
익명사용자 님이 2014년 7월 3일 질문

1개의 답변

0 추천

뭘하려는건지는 모르겠으나....setEnabled로하면 될거같은데요?

whdrb19 (23,520 포인트) 님이 2014년 7월 3일 답변
view.findViewById(R.id.dicisionBtn).setEnabled(true);
에서 null포인트 익셉션이 나와서 사용 할 수 없습니다..
dicisionBtn이 해당 listview에 존재하는게 아니라 해당 listview를 포함하는
View에 있는 버튼입니다..
MonitorItemListView에서 정의된 로직좀 보여주실수있으신가요?

커스텀리스트뷰면 당연히 ListView를 상속받아서사용한거같은데
MonitorItemListView에 Adpater를 하나더만들어서 그쪽에다가 구현해야되는거아닌가요?
커스텀어뎁터를만들어서 listview에 setAdapter로 넣을뿐이라서요..
정확히 하시는 말씀이 이해가 잘 안되네요 ㅜ 일단 MonitorItemListView
소스입니다. 관심과 답변 감사합니다..

private class MonitorItemListView {
        private View mBaseView = null;
        private TextView mArticle = null;
        private Spinner mUnit = null;
        private CheckBox mViewCheckedItem = null;
        private CheckBox mGraphCheckedItem = null;
        private TextView mRangeMin = null;
        private TextView mRangeMax = null;
       
        public MonitorItemListView(View baseView) {
            this.mBaseView = baseView;
        }
       
        public TextView GetArticle() {
            if(mArticle == null) {
                mArticle = (TextView)mBaseView.findViewById(R.id.mArticle);
            }
            return mArticle;
        }
        public Spinner GetUnit() {
            if(mUnit == null) {
                mUnit = (Spinner)mBaseView.findViewById(R.id.mUnit);
            }
            return mUnit;
        }
        public CheckBox GetViewCheckedItem() {
            if(mViewCheckedItem == null) {
                mViewCheckedItem = (CheckBox)mBaseView.findViewById(R.id.mViewCheckedItem);
            }
            return mViewCheckedItem;
        }
        public CheckBox GetGraphCheckedItem() {
            if(mGraphCheckedItem == null) {
                mGraphCheckedItem = (CheckBox)mBaseView.findViewById(R.id.mGraphCheckedItem);
            }
            return mGraphCheckedItem;
        }
        public TextView GetRangeMin() {
            if(mRangeMin == null) {
                mRangeMin = (TextView)mBaseView.findViewById(R.id.mRangeMin);
            }
            return mRangeMin;
        }
        public TextView GetRangeMax() {
            if(mRangeMax == null) {
                mRangeMax = (TextView)mBaseView.findViewById(R.id.mRangeMax);
            }
            return mRangeMax;
        }
    }
mBaseView가 보이는데.. 저게 결정적으로
listview_monitor_item_list에서 받아오는 id값을 연결해야되는데 연결이 안되어있습니다

리스트뷰안에 어떤걸하는데 이렇게된건지 이해가안가네요~

무엇을 하시려는데 저렇게 구현이되어있는건가요??
...