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

PreferenceActivity에서 특정 위치로 scroll해서 화면 띄우는 법

0 추천
안녕하세요.

환경설정 화면을 PreferenceActivity로 만들었는데요.
도움말 화면에서 인텐트에 문자열을 담아서
이 환경설정 화면으로 이동해서
문자열에 해당하는 preference 부분으로 스크롤해서 이동하여
화면을 보여주려고 합니다.

현재 설정화면으로 이동까지는 되었는데
문제는 설정 화면에서 특정 preference로 스크롤해서
화면에 보여주는 것이 안되고 있습니다.

구글링을 열심히 해봤는데요.

smoothScrollToPosition()
이 매서드로 이동이 가능한데
문제는 이 메서트가 onCreate, onResume 과 같은 곳에서는 사용이 안되어서
getListView().post(new Runnable() 과 같이
화면이 다 그려진 후에 던져야한다고 하는데
이것도 작동이 안되더군요.

그래서 thread, 타이머, 핸들러 등으로 해봤지만 안되더군요.

설정 화면을 띄울 때 특정 부분으로 이동해서 나타나게 하는 좋은 방법이 없을까요?
도움 주시면 고맙겠습니다.

다음은 도움말 Activity의 해당 코드입니다.

TextView helpT = (TextView)findViewById(R.id.helpT6);
   helpT.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
       Intent intent = new Intent(Help6.this, Setting.class);
       intent.putExtra("prefPosition", "autoEmailBackup");
       startActivity(intent);
     }
});

 

다음은 설정 Activity의 onCreate에 있는 코드입니다.

getListView().post(new Runnable() {
   @Override
   public void run() {
       Intent intent = getIntent();
       String prefPosition = intent.getStringExtra("prefPosition");
       if( !prefPosition.equals("")) {
           int pPosition = getScrollPosition(prefPosition);
           getListView().smoothScrollToPosition(pPosition);
        }
   }
});
단추 (220 포인트) 님이 2017년 1월 22일 질문
일단 생성시점의 문제인지, 원래 동작이 안되는지를 찾기 위해서는 사람이 터치하면 저 코드가 호출하게 만들어서 테스트 해보세요.
생성시점상의 문제입니다.  PreferenceActivity의 onCreate나 onResume 에서는 스크롤 메서드를 사용할 수 없다고 해요.  왜냐하면 모든 목록이 화면에 완전히 나타난 다음에야 스크롤이 이루어져야한다는 것 때문이죠.  일단 프레퍼런스 설정 화면에 진입한 후(onCreate가 완료된 후)에 스크롤 매서드를 실행하면 잘 이동이 됩니다.
그러면 postDelay로 해보세요.

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...