2011-09-29 2 views

답변

4

그래서 실제로는 상당히 쉬워야합니다. 구현 세부 사항 측면에서 우리에게 많은 것을 제공하지는 않았으므로 준결승 코드에 최선을 다해 당신에게 좋은 결과를 줄 것입니다.

우리는 네트워크 응답을 기다리는 동안 UI 스레드를 차단하지 않기 위해 별도의 스레드에서 쿼리를 수행하려고합니다. AsyncTask, IntentService 또는 일종의 Loader를 사용하는 등 다양한 방법으로이 작업을 수행 할 수 있습니다. 귀하의 경우에는 AsyncTaskLoader 클래스가 최고가 될 사용자 정의 클래스 파생 폼이 있다고 생각합니다. 그래서 이것이 어떻게 보이는지 보도록하겠습니다 (로더를 사용하기 위해서는 더 최신 api에 액세스해야하며, API 레벨 11 이하라면이 애플리케이션을 작성하려면 http://developer.android.com/resources/articles/backward-compatibility.html을 확인하십시오).

MyActivity extends Activity implements LoaderManager.LoaderCallbacks<List<SpinnerItem>>{ 
    private Adapter<SpinnerItem> spinnerAdapter; 
    private static final int SPINNER_LOADER_ID = 0; 

    public void onCreate(Bundle icicle){ 
    Spinner theSpinner = findViewById(R.id.the_spinner); 
    spinnerAdapater = new Adapter<SpinnerItem>(...); //create empty adapter 
    spinnerAdapater.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    theSpinner.setAdapter(spinnerAdapater); 
    getLoaderManager().initLoader(SPINNER_LOADER_ID, null, this); 
    } 

    public Loader<List<SpinnerItems>> onCreateLoader(int id, Bundle arg){ 
    //Create and return your loader 
    } 

    public void onLoadFinish(Loader<List<SpinnerItem>> loader, List<SpinnerItem> data){ 
    //update your adapater with the new data 
    } 

    public void onLoaderReset(Loader<List<SpinnerItem>> loader){ 
    //clear out all the data in the adapter 
    } 

} 

여기에 모두 매우 간단합니다. Android 개발자 페이지의 로더, 어댑터 등에 대한 내용을 읽어서 틈새를 메울 수 있어야합니다. "SpinnerItem"으로 가득 찬 "목록"을 사용한다는 사실은 물론 사용하려는 어댑터의 유형과 같이 특정 구현에 의존하게됩니다. 원하는 실제 데이터 구조를 마음대로 선택할 수 있습니다. 다시 한 번 자세한 내용은 Android 개발자 페이지를 참조하십시오. 지금까지 로더 클래스가 간다,이 같은 할 싶은 것 :

MyNetworkLoader extends AsyncTaskLoader<List<SpinnerItem>> 
    public MyNetworkLoader(Context context){ 
    super(context); 
    } 

    List<SpinnerItem> loadInBackground(){ 
    //Get data from server 
    } 
} 

loadInBackground 방법에 당신이 (당신의 서버에 쿼리 및 데이터 구조의 일종으로 응답을 변환하기 위해 CustomHttpClient를 사용합니다 이 예에서 우리는 "SpinnerItem"의 "List"를 사용하고 있습니다.

마지막으로 네트워크 요청이 완료 될 때까지 회 전자는 비어 있습니다. 스피너의 내용이로드되고 있음을 사용자에게 알리는 일종의 논리를 포함 할 수 있습니다.

그게 전부입니다. 새로운 로더 API는 작업을 매우 간단하게 만듭니다.

0

예 가능합니다. php/mysql 쿼리를 사용하여 항목 목록을 검색 한 다음 해당 항목을 어댑터를 사용하여 회 전자에 제공하십시오. 이 질문은 SpinnerAdapter를 작성하는 방법의 예를 제공합니다. How to correctly overwrite methods of SpinnerAdapter

관련 문제