2012年7月24日火曜日

ListView追加読み込み:003 SimpleAdapter



import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class AndroidAsyncTaskActivity extends Activity implements OnScrollListener {

 private ArrayAdapter<String> adapter;
 private AsyncTask<String, Integer, Long> mTask;
 private ListView listView;
 private View mFooter;
 

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  listView = (ListView) findViewById(R.id.listView1);

  adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
  // アイテムを追加します
  for (int i = 1; i < 10; i++) {
   adapter.add("Item" + i);
  }

  mFooter = getLayoutInflater().inflate(R.layout.listview_footer, null);
  
  listView.addFooterView(mFooter);
  
  // アダプターを設定します
  listView.setAdapter(adapter);

  listView.setOnScrollListener(this);
 }



 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
  // TODO 自動生成されたメソッド・スタブ
  if (totalItemCount == firstVisibleItem + visibleItemCount) {
   Log.d("TAG", "末尾");//

   additionalReading();
  }

 }

 private void additionalReading() {
  // TODO 自動生成されたメソッド・スタブ
  // 既に読み込み中ならスキップ
  if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) {
   Log.d("", "読み込み中");
   return;
  }
  mTask = new MyAsyncTask(this).execute("text");

 }
 public class MyAsyncTask extends AsyncTask<String, Integer, Long> {

  public MyAsyncTask(AndroidAsyncTaskActivity androidAsyncTaskActivity) {
  }
  
  protected Long doInBackground(String... params) {
   Log.d("", "doInBackground ::" + params[0]);// doInBackground

   try {
    Thread.sleep(2000);//確認のために2秒止める
   } catch (InterruptedException e) {
    // TODO 自動生成された catch ブロック
    e.printStackTrace();
   }
   
   return 999L;
  }

  @Override
  protected void onPostExecute(Long result) {
   Log.d("", "onPostExecute :: " + result);// doInBackground のリターン
   //データ追加
   for (int n = 0; n < 10; n++) {
    adapter.add("追加" + n);
   }
  }

 }

 public void onScrollStateChanged(AbsListView view, int scrollState) {
  // TODO 自動生成されたメソッド・スタブ

 }
}

関連記事

0 件のコメント:

コメントを投稿