package com.marshalchen.common.demoofui.sampleModules; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.LinkedList; import android.app.Activity; import android.app.IntentService; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.content.LocalBroadcastManager; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import com.marshalchen.common.demoofui.R; import com.marshalchen.common.ui.DropDownListView; import com.marshalchen.common.ui.ToastUtil; /** * DropDownListViewDemo * * @author <a href="http://www.trinea.cn/android/dropdown-to-refresh-and-bottom-load-more-listview/" * target="_blank">Trinea</a> 2013-6-1 */ public class DropDownListViewDemo extends Activity { private LinkedList<String> listItems = null; private DropDownListView listView = null; private ArrayAdapter<String> adapter; private String[] mStrings = {"Aaaaaa", "Bbbbbb", "Cccccc", "Dddddd", "Eeeeee", "Ffffff", "Gggggg", "Hhhhhh", "Iiiiii", "Jjjjjj", "Kkkkkk", "Llllll", "Mmmmmm", "Nnnnnn",}; public static final int MORE_DATA_MAX_COUNT = 3; public int moreDataCount = 0; private GetDataReceiver onDropDownReceiver; private GetDataReceiver onClickReceiver; @Override public void onCreate(Bundle savedInstanceState) { // super.onCreate(savedInstanceState, R.layout.drop_down_listview_demo); super.onCreate(savedInstanceState); setContentView(R.layout.drop_down_listview_demo); listView = (DropDownListView) findViewById(R.id.list_view); // set drop down listener onDropDownReceiver = new GetDataReceiver(true); LocalBroadcastManager.getInstance(this).registerReceiver(onDropDownReceiver, new IntentFilter("onDropDownReceiver")); listView.setOnDropDownListener(new DropDownListView.OnDropDownListener() { @Override public void onDropDown() { Intent getData = new Intent(DropDownListViewDemo.this, GetDataService.class); getData.putExtra("FILTER", "onDropDownReceiver"); DropDownListViewDemo.this.startService(getData); } }); // set on bottom listener onClickReceiver = new GetDataReceiver(false); LocalBroadcastManager.getInstance(this).registerReceiver(onClickReceiver, new IntentFilter("onClickReceiver")); listView.setOnBottomListener(new OnClickListener() { @Override public void onClick(View v) { Intent getData = new Intent(DropDownListViewDemo.this, GetDataService.class); getData.putExtra("FILTER", "onClickReceiver"); DropDownListViewDemo.this.startService(getData); } }); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ToastUtil.show(DropDownListViewDemo.this, "drop_down_tip"); } }); // listView.setShowFooterWhenNoMore(true); listItems = new LinkedList<String>(); listItems.addAll(Arrays.asList(mStrings)); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems); listView.setAdapter(adapter); } @Override public void onDestroy() { super.onDestroy(); if (onClickReceiver != null) LocalBroadcastManager.getInstance(this).unregisterReceiver(onClickReceiver); if (onDropDownReceiver != null) LocalBroadcastManager.getInstance(this).unregisterReceiver(onDropDownReceiver); } private class GetDataReceiver extends BroadcastReceiver { private boolean isDropDown; public GetDataReceiver(boolean isDropDown) { this.isDropDown = isDropDown; } @Override public void onReceive(Context receiverContext, Intent receiverIntent) { if (isDropDown) { listItems.addFirst("Added after drop down"); adapter.notifyDataSetChanged(); // should call onDropDownComplete function of DropDownListView at end of drop down complete. SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss"); listView.onDropDownComplete("update_at" + dateFormat.format(new Date())); } else { moreDataCount++; listItems.add("Added after on bottom"); adapter.notifyDataSetChanged(); if (moreDataCount >= MORE_DATA_MAX_COUNT) { listView.setHasMore(false); } // should call onBottomComplete function of DropDownListView at end of on bottom complete. listView.onBottomComplete(); } } } public static class GetDataService extends IntentService { public GetDataService() { super("GetDataService"); } public void onHandleIntent(Intent intent) { try { Thread.sleep(1000); } catch (InterruptedException e) { ; } Intent resultIntent = new Intent(intent.getStringExtra("FILTER")); LocalBroadcastManager.getInstance(this).sendBroadcast(resultIntent); } } }