목록안드로이드 (35)
study record
프래그먼트에는 액티비티의 setContentView()메소드가 없다. 액티비티의 setContentView()메소드를 통해 화면에 나올 xml 파일을 손쉽게 지정할 수 있었다. 프래그먼트에서는 이 메소드가 없으므로 XML레이아웃 파일의 내용을 소스파일과 매칭하는 과정이 필요하다. 먼저 인플레이션 객체 LayoutInflater를 사용해 인플레이션을 진행한다. 클래스에서 사용하도록 하는 코드는 onCreateView()메서드 안에 기술한다. 이후 inflate() 메서드를 호출하고, 인플레이션 과정 종료, 뷰처럼 동작하게 된다.
프래그먼트로 구성된 화면들로 이루어진 앱에서 뒤로 가기를 눌렀을 경우에 바로 앱을 나가지는 문제가 있다. 구글링해 본 결과, addToBackStack(null) 코드를 넣으면 이전 프래그먼트로 돌아가게 된다. 내가 쓴 코드이다. replace와 commit 사이에 코드를 추가했더니 뒤로 가기 버튼을 누렀을 때 이전의 프래그먼트 화면으로 잘 변경되었다. ((MainActivity)getActivity()).getSupportFragmentManager().beginTransaction().replace(R.id.container, YoutubeSinger).addToBackStack(null).commit();
listView.setSelection(position); 원래는 이거 하나면 리스트뷰의 리스트 중 원하는 아이템을 원하는 위치에 고정시킬 수 있었다. 그런데 원하는 아이템을 업데이트시키려고 했을 때, 잘 바뀌지 않는 문제가 있었다. 아래의 코드로 바꾸고 나니 잘 업데이트되었다. listView.post(new Runnable() { @Override public void run() { if (null != listView) { listView.clearFocus(); listView.requestFocusFromTouch(); listView.setSelection(firstPosition); } } });
- 리스트 안의 버튼 클릭 이벤트는 어뎁터의 getView() 메소드를 이용하면 편하게 진행할 수 있다. position 변수가 존재하기 때문에 편하게 원하는 기능들을 구현할 수 있다. getView()메소드에서 view.findViewById(R.id.button)이런 식으로 버튼을 가져오면 된다. 나는 이 메소드를 잘 모른 채, 더 안 쪽의 클래스에서 버튼 클릭 이벤트를 진행하려다가 많이 헤맸다.. 구글링의 중요성.. 클래스 간 데이터 전달 등등 찾아보다가 extends Application 까지 하고 심지어 거의 성공했다.. 암튼 구글링을 많이 하면 삽질을 덜 할 수 있다는 교훈..