티스토리 뷰

4시간동안 삽질하다가 해결해서 너무 감격스러워 포스팅남깁니다.


문제는 Activity의 UI 제어를 담당하는 UiHelper클래스를 만든것이었습니다.

UiHelper에게 레이아웃을 넘겨주어 View를 초기화하도록 하였습니다.

그런데 View초기화에 계속해서 문제가 생겼습니다. View.OnClickListener를 달아도 이벤트가 발생하지 않는 문제였습니다.

이것저것 해보다가 결국 setContentView( ... )의 내용과 위치를 변경하여 해결하였습니다.



문제의 코드는 다음과 같습니다.

RegistrationActivity.java (수정전)

public class RegistrationActivity extends AppCompatActivity implements View.OnClickListener{

private RegistrationUiHelper uiHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registration);

LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
ViewGroup rootLayout = (ViewGroup)inflater.inflate(R.layout.activity_registration, null);

uiHelper = new RegistrationUiHelper(rootLayout, this);
uiHelper.changeStage(-1);
}


Inflate하려는 레이아웃은 activity_registration이었습니다.

setContentView(...)이후에 LayoutInflater를 이용해 이미 Inflating된 레이아웃을 다시 Inflating 시도했죠.

이것이 문제가 되었고, 다음과 같이 간단하게 변경하여 해결하게 되었습니다.

  


RegistrationActivity.java (수정후)

public class RegistrationActivity extends AppCompatActivity implements View.OnClickListener{

private RegistrationUiHelper uiHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
ViewGroup rootLayout = (ViewGroup)inflater.inflate(R.layout.activity_registration, null);

uiHelper = new RegistrationUiHelper(rootLayout, this);
uiHelper.changeStage(-1);

setContentView(rootLayout);
}


setContentView의 위치를 Inflating을 완료한 후 호출해주었고, 레이아웃 리소스자체를 호출하는 것이 아닌, Inflating 해놓은 인스턴스를 전달해주었습니다.



정확한 문제와 개념은 나중에 찾아보고 하던 일로 다시 돌아가야겠죠ㅠㅠ


댓글
댓글쓰기 폼
공지사항
Total
37,943
Today
34
Yesterday
56
링크
TAG
more
«   2018/05   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
글 보관함