package com.roboo.like.netease.fragment;
import java.util.LinkedList;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.AsyncTaskLoader;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.SearchView.OnQueryTextListener;
import android.widget.TextView;
import com.roboo.like.netease.R;
import com.roboo.like.netease.WeatherActivity;
import com.roboo.like.netease.dao.ICityDao;
import com.roboo.like.netease.dao.impl.CityDaoImpl;
import com.roboo.like.netease.database.DBHelper;
import com.roboo.like.netease.model.City;
public class LoaderFragment extends ListFragment implements LoaderCallbacks<LinkedList<City>>,OnQueryTextListener
{
private static LinkedList<City> mData;
private CityAdapter mAdapter;
private String mCurrentQueryString;
public static LoaderFragment newInstance(Bundle bundle)
{
LoaderFragment fragment = new LoaderFragment();
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
// 中间一个进度圈
setListShown(false);
setEmptyText(getString(R.string.tv_loading_city_data));
getLoaderManager().initLoader(0, null, this);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
super.onCreateOptionsMenu(menu, inflater);
MenuItem item = menu.add(R.string.tv_search_city);
item.setIcon(R.drawable.ic_search);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM
| MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
SearchView sv = new SearchView(getActivity());
sv.setOnQueryTextListener(this);
item.setActionView(sv);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id)
{
City city = (City) mAdapter.getItem(position);
ICityDao cityDao = new CityDaoImpl(new DBHelper(getActivity()));
if (null != city)
{
cityDao.setSelectedCity(city.getCityCode());
}
Intent intent = new Intent(getActivity(), WeatherActivity.class);
startActivity(intent);
}
private static class CityTaskLoader extends AsyncTaskLoader<LinkedList<City>>
{
private Context context;
public CityTaskLoader(Context context)
{
super(context);
this.context = context;
}
@Override
public LinkedList<City> loadInBackground()
{
System.out.println("loadInBackground() ");
ICityDao cityDao = new CityDaoImpl(new DBHelper(context));
return cityDao.getCityList();
}
@Override
protected void onForceLoad()
{
System.out.println("onForceLoad");
super.onForceLoad();
}
@Override
public boolean cancelLoad()
{
System.out.println("cancleLoad()");
return super.cancelLoad();
}
@Override
public void onCanceled(LinkedList<City> data)
{
System.out.println("onCancled");
super.onCanceled(data);
}
@Override
protected LinkedList<City> onLoadInBackground()
{
System.out.println("onLoadInBackground()");
return super.onLoadInBackground();
}
@Override
public void deliverResult(LinkedList<City> data)
{
System.out.println("deliverResult()");
super.deliverResult(data);
}
@Override
protected void onStartLoading()
{
super.onStartLoading();
System.out.println("onStartLoading()");
if (null == mData)
{
System.out.println("forceLoad()");
forceLoad();
}
else
{
System.out.println("deliverResult(mData)");
deliverResult(mData);
}
}
}
@Override
public Loader<LinkedList<City>> onCreateLoader(int id, Bundle args)
{
System.out.println("onCreateLoader");
return new CityTaskLoader(getActivity());
}
@Override
public void onLoadFinished(Loader<LinkedList<City>> loader, LinkedList<City> data)
{
System.out.println("onLoadFinished()");
mAdapter = new CityAdapter(getActivity(), data);
setListAdapter(mAdapter);
System.out.println("data = " + data.size());
if (isResumed())
{
setListShown(true);
}
else
{
setListShownNoAnimation(true);
}
}
@Override
public void onLoaderReset(Loader<LinkedList<City>> loader)
{
System.out.println("onLoaderReset()");
}
private static class CityAdapter extends BaseAdapter
{
private LinkedList<City> data;
private Context context;
public CityAdapter(Context context, LinkedList<City> data)
{
this.data = data;
this.context = context;
}
@Override
public int getCount()
{
return data.size();
}
@Override
public Object getItem(int position)
{
return data.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
convertView = LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, null);
TextView textView = (TextView) convertView.findViewById(android.R.id.text1);
textView.setText(data.get(position).getCityName());
return convertView;
}
}
@Override
public boolean onQueryTextSubmit(String query)
{
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onQueryTextChange(String newText)
{
mCurrentQueryString = !TextUtils.isEmpty(newText) ? newText : null;
return true;
}
//onActivityCreated#getLoaderManager.initLoader(0,null,LoaderManager.LoaderCallBacks)
//onCreateLoader#AsyncTaskLoader onStartLoading forceLoad onForceLoad cancleLoad onLoadingInbackground loadinbackground
//deliverResult onLoaderFinish
}