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

LoaderManager와 AsyncTaskLoader를 이용해서 일정시간마다 리스트 업데이트 하려면?

0 추천
package com.example.asynctaskloader;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.support.v4.content.AsyncTaskLoader;

public class StringsDownloadTaskLoader extends AsyncTaskLoader<List<String>> {
	
	static int idx  = 0;

	public StringsDownloadTaskLoader(Context context) {
		super(context);
	}


	@Override
	public List<String> loadInBackground() {
		
		List<String> strings = new ArrayList<String>();
		idx++;
		
		try {
			Thread.sleep(500); 
			
			String str = String.format("%d", idx);
			strings.add(str);

		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		return strings;
	}
	
	
	
}
//출처: http://blog.nkzn.net/entry/20120113/1326478800

package com.example.asynctaskloader;

import java.util.List;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends FragmentActivity implements LoaderCallbacks<List<String>>{
	
	ArrayAdapter<String> mAdapter;

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
       
		ListView listView = (ListView)findViewById(R.id.listview);
		mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
		listView.setAdapter(mAdapter);

		
		Bundle args = new Bundle(1); 
		getSupportLoaderManager().initLoader(0, args, this);

    }


	@Override
	public Loader<List<String>> onCreateLoader(int id, Bundle args) {

    	StringsDownloadTaskLoader loader = new StringsDownloadTaskLoader(getApplication());
		loader.forceLoad();
		return loader;
	}


	@Override
	public void onLoadFinished(Loader<List<String>> loader, List<String> data) {
		for(String s: data){
			mAdapter.add(s);
		}
		mAdapter.notifyDataSetChanged();
		
		Bundle bundle = new Bundle (1);
        getSupportLoaderManager (). restartLoader (0, bundle, this);
		
		//mhandler.sendEmptyMessageDelayed(0, 1000);
	}


	@Override
	public void onLoaderReset(Loader<List<String>> loader) {
		// TODO Auto-generated method stub
		
	}
	
	
	public Handler mhandler = new Handler(){ // 핸들러 처리부분
	   
		public void handleMessage(Message msg){ // 메시지를 받는부분
	        

	    };
	};
	

}

handler로 일정시간마다 재호출하고 싶은데 잘 안되서..

onLoadFinished함수에서 다시 호출하게 했는데..;;;  

 

어떻게 해야 합니까?

이정주 (780 포인트) 님이 2013년 4월 25일 질문

1개의 답변

0 추천
AsyncTaskLoader에 setUpdateThrottle(long delayMS) 메소드를 찾아보세요.
b22n (22,940 포인트) 님이 2013년 4월 25일 답변
...