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

custom title bar 생성시 listener null 에러 ...

0 추천

안녕하세요.

커스텀으로 타이틀 바를 만들어서 사용하려 합니다.

 

타이틀바의 해당 이미지를 클릭시에 activity로 interface를 통해 이벤트를 넘겨주로 합니다.

 

listener 초기화도 정상적으로 된것으로 보이는데.

실제 동작시에는 null error 로 인해 동작을 하지 않습니다.

 

혹시 이런 경우 어떻게 해야 하는지 아시는 분 계시면..

답변 좀 부탁드리겠습니다.

 

==== 커스텀 뷰 ==== 

public class CustomTitleBar extends LinearLayout implements View.OnClickListener{

    public interface OnTitleBarListener {
        void onBackKeyPress();
        void onSettingPress();
    }

    private LinearLayout mLlBack;
    private LinearLayout mLlSetting;
    private TextView mTvTitle;

    private OnTitleBarListener mTitleBarListener;

    public CustomTitleBar(Context a_context){
        super(a_context);

        init(a_context, null, 0);
    }


    public CustomTitleBar(Context a_context, AttributeSet attrs) {
        super(a_context, attrs);
        init(a_context, attrs, 0);
    }

    public CustomTitleBar(Context a_context, AttributeSet attrs, int defStyleAttr) {
        super(a_context, attrs, defStyleAttr);
        init(a_context, attrs, defStyleAttr);
    }

    private void init(Context a_context, AttributeSet attrs, int defStyleAttr){

        LayoutInflater inflater = (LayoutInflater) a_context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.layout_title_bar, this, true);

        mTvTitle = (TextView)view.findViewById(R.id.tv_title);

        mLlBack = (LinearLayout)view.findViewById(R.id.ll_back);
        mLlBack.setOnClickListener(this);

        mLlSetting = (LinearLayout)view.findViewById(R.id.ll_setting);
        mLlSetting.setOnClickListener(this);
    }

    public void setTitleBarListener(OnTitleBarListener a_listener){
        this.mTitleBarListener = a_listener;
    }

    public void setTitle(String a_title){
        mTvTitle.setText(a_title);
    }

    @Override
    public void onClick(View v) {
        if(mTitleBarListener == null){
            return;
        }

        switch (v.getId()){
            case R.id.ll_back:
                mTitleBarListener.onBackKeyPress();
                break;
            case R.id.ll_setting:
                mTitleBarListener.onSettingPress();
                break;
            default:
                break;
        }

    }
}

 

 

==== activity 에서 호출 ====

mTitleBar = new CustomTitleBar(mContext, null);
mTitleBar.setTitleBarListener(this);
mTitleBar.setTitle(getString(R.string.str_main_activity));

 

 

 

삼식이 (680 포인트) 님이 2017년 9월 5일 질문

1개의 답변

0 추천
자답 입니다 activity 에서 findviewbyId를 해서 초기화를 해야 하는데.

잘 못 초기화 했네요.
삼식이 (680 포인트) 님이 2017년 9월 5일 답변
...