1

내 PreferenceFragment에는 onCreate()에서 프로그래밍 방식으로 채워지는 ListPreference가 있습니다. 따라서 단편 시작시 약간의 지연이 있습니다. 그것을 방지하기 위해 선호도를 누른 경우에만 ListPreference를 채우고 내용이로드되는 동안 불확정 ProgressBar를 넣으려고합니다.PreferenceFragment의 ListPreference에 대한 내용을로드하는 동안 ProgressBar가 불확실합니다.

어떻게 구현할 수 있습니까? 어댑터를 다시 작성해야합니까? 어떻게 ListPreference에 대한 뷰를 View.OnClickListener로 전달할 수 있습니까?

나는 이것이 사소한 질문이 아니길 바란다. 나는 잠시 봤지만 모든 것을 실제로 구현해야한다는 것을 이해하지 못했다.

미리 감사드립니다.

+0

저는 지금 비슷한 상황에 직면하고 있습니다. 질문에 대한 해결책을 찾을 수 있었습니까? – Phat7

답변

0

AsyncTask을 사용하여 ListPreference를 비동기 적으로 채우고 완료되면 불확정 진행률 표시 줄을 제거 할 수 있습니다.

첫째,과 같이 AsyncTask를 확장 :

private class PopulateListPreferenceTask extends AsyncTask<CharSequence, Void, Void> { 
protected Long doInBackground(CharSequence... entries) { 
    // Code to populate ListPreference in here 
} 

protected void onPostExecute() { 
    // Add code here if necessary to retrieve the progress bar view, i.e. findViewById 
    myIntederminateProgressBar.setVisibility(View.GONE); 
} 

}

이 불확정 진행률 표시 줄이 처음에 보여 주었다.

new PopulateListPreferenceTask().execute(/*CharSequence entries go here*/); 

몇 노트 : 다음, 당신의 조각의 onActivityCreated 방법, 전화 당신이 입력으로 Charsequence의를 제공 할 것이라고 가정하고

  • 을,하지만 당신은 다른 유형을 사용할 수 있습니다.
  • AsyncTask가 Activity 컨텍스트를 받아야하는 경우 을 생성자에 오버로드하여 매개 변수로 전달한 다음 을 필드에 저장할 수 있습니다.
+0

답장을 보내 주셔서 대단히 감사합니다. 처음에 불확실한 진행 표시 줄을 만드는 방법을 이해하지 못했습니다. 둘째 activityCreateView 메서드에 대한 설명서를 찾을 수 없습니다. – turlando

+0

내 응답을 편집했습니다 (onActivityCreated가 아니라 activityCreateView를 의미 함). 프로그래밍 방식으로 또는 레이아웃 XML에서 진행률 표시 줄을 만들고 있습니까? – EricaCooksey

+0

저는 XML에서 UI 요소를 정의하는 데 사용됩니다. 나는 새로운 RelativeLayout을 만들고 그것을 ListPreference 다이얼로그 콘텐트 자리 표시 자에 바인딩하려고 생각했다. 맞아? – turlando

4

나는 이것을 위해 PreferenceFragment을 만들었습니다.

PreferenceFragment 대신이 번호를 확장하고 모든로드가 완료 될 때까지 addPreferencesFromResource 번으로 전화를 걸면 ProgressBar이 숨겨지고 콘텐츠가 표시됩니다.

public class ProgressBarPreferenceFragment extends PreferenceFragment { 

    private FrameLayout progress; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = super.onCreateView(inflater, container, savedInstanceState); 
     showLoading((ViewGroup) view); 
     return view; 
    } 

    @Override 
    public void addPreferencesFromIntent(Intent intent) { 
     super.addPreferencesFromIntent(intent); 

     hideLoading(); 
    } 

    @Override 
    public void addPreferencesFromResource(int preferencesResId) { 
     super.addPreferencesFromResource(preferencesResId); 

     hideLoading(); 
    } 

    private void hideLoading() { 
     ViewGroup root = (ViewGroup) getView(); 
     if ((root != null) && (progress != null)) { 
      root.removeView(progress); 
     } 
    } 

    private void showLoading(ViewGroup root) { 
     progress = new FrameLayout(root.getContext()); 
     FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     lp.gravity = Gravity.CENTER; 
     progress.addView(new ProgressBar(root.getContext()), lp); 
     LayoutParams lp2 = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
     root.addView(progress, lp2); 
    } 
}