@myron-lee
2015-01-16T12:05:22.000000Z
字数 6142
阅读 1330
每日记录
每个年轻的内心都是复杂纷乱的。有些话不能说出口。
传递与填充数据
- 真实距离不好计算
不在 onCreateView做初始化工作,放到 onActivityCreated 中。在 onCreateView 中只保存一个 rootView 的引用,注意要再 onDestoryView 中把它设为 null。
public class SimpleFragment extends TaskFragment implements OnLoadDataListener
{
private ViewState mViewState = null;
private View mRootView;
private LoadDataTask mLoadDataTask;
private ProductEntity mProduct;
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
mRootView = inflater.inflate(R.layout.fragment_simple, container, false);
return mRootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
// load and show data
if(mViewState==null || mViewState==ViewState.OFFLINE)
{
loadData();
}
else if(mViewState==ViewState.CONTENT)
{
if(mProduct!=null) renderView();
showContent();
}
else if(mViewState==ViewState.PROGRESS)
{
showProgress();
}
else if(mViewState==ViewState.EMPTY)
{
showEmpty();
}
}
@Override
public void onStart()
{
super.onStart();
}
@Override
public void onResume()
{
super.onResume();
}
@Override
public void onPause()
{
super.onPause();
}
@Override
public void onStop()
{
super.onStop();
}
@Override
public void onDestroyView()
{
super.onDestroyView();
mRootView = null;
}
@Override
public void onDestroy()
{
super.onDestroy();
// cancel async tasks
if(mLoadDataTask!=null) mLoadDataTask.cancel(true);
}
@Override
public void onDetach()
{
super.onDetach();
}
@Override
public void onSaveInstanceState(Bundle outState)
{
// save current instance state
super.onSaveInstanceState(outState);
setUserVisibleHint(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
// action bar menu
super.onCreateOptionsMenu(menu, inflater);
// TODO
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
// action bar menu behaviour
return super.onOptionsItemSelected(item);
// TODO
}
@Override
public void onLoadData()
{
runTaskCallback(new Runnable()
{
public void run()
{
if(mRootView==null) return; // view was destroyed
// get data
mProduct = new ProductEntity();
mProduct.setName("Test Product");
// hide progress and render view
if(mProduct!=null)
{
renderView();
showContent();
}
else showEmpty();
}
});
}
private void loadData()
{
if(NetworkManager.isOnline(getActivity()))
{
// show progress
showProgress();
// run async task
mLoadDataTask = new LoadDataTask(this);
executeTask(mLoadDataTask);
}
else
{
showOffline();
}
}
private void showContent()
{
// show content container
ViewGroup containerContent = (ViewGroup) mRootView.findViewById(R.id.container_content);
ViewGroup containerProgress = (ViewGroup) mRootView.findViewById(R.id.container_progress);
ViewGroup containerOffline = (ViewGroup) mRootView.findViewById(R.id.container_offline);
ViewGroup containerEmpty = (ViewGroup) mRootView.findViewById(R.id.container_empty);
containerContent.setVisibility(View.VISIBLE);
containerProgress.setVisibility(View.GONE);
containerOffline.setVisibility(View.GONE);
containerEmpty.setVisibility(View.GONE);
mViewState = ViewState.CONTENT;
}
private void showProgress()
{
// show progress container
ViewGroup containerContent = (ViewGroup) mRootView.findViewById(R.id.container_content);
ViewGroup containerProgress = (ViewGroup) mRootView.findViewById(R.id.container_progress);
ViewGroup containerOffline = (ViewGroup) mRootView.findViewById(R.id.container_offline);
ViewGroup containerEmpty = (ViewGroup) mRootView.findViewById(R.id.container_empty);
containerContent.setVisibility(View.GONE);
containerProgress.setVisibility(View.VISIBLE);
containerOffline.setVisibility(View.GONE);
containerEmpty.setVisibility(View.GONE);
mViewState = ViewState.PROGRESS;
}
private void showOffline()
{
// show offline container
ViewGroup containerContent = (ViewGroup) mRootView.findViewById(R.id.container_content);
ViewGroup containerProgress = (ViewGroup) mRootView.findViewById(R.id.container_progress);
ViewGroup containerOffline = (ViewGroup) mRootView.findViewById(R.id.container_offline);
ViewGroup containerEmpty = (ViewGroup) mRootView.findViewById(R.id.container_empty);
containerContent.setVisibility(View.GONE);
containerProgress.setVisibility(View.GONE);
containerOffline.setVisibility(View.VISIBLE);
containerEmpty.setVisibility(View.GONE);
mViewState = ViewState.OFFLINE;
}
private void showEmpty()
{
// show empty container
ViewGroup containerContent = (ViewGroup) mRootView.findViewById(R.id.container_content);
ViewGroup containerProgress = (ViewGroup) mRootView.findViewById(R.id.container_progress);
ViewGroup containerOffline = (ViewGroup) mRootView.findViewById(R.id.container_offline);
ViewGroup containerEmpty = (ViewGroup) mRootView.findViewById(R.id.container_empty);
containerContent.setVisibility(View.GONE);
containerProgress.setVisibility(View.GONE);
containerOffline.setVisibility(View.GONE);
containerEmpty.setVisibility(View.VISIBLE);
mViewState = ViewState.EMPTY;
}
private void renderView()
{
// reference
TextView nameTextView = (TextView) mRootView.findViewById(R.id.fragment_simple_name);
// content
nameTextView.setText(mProduct.getName());
}
}
查文档,决定比查博客高效、准确、可靠。
long vs double ???
百度地图,经纬度到地址的转换(坑爹的 api,竟然没有查询功能,我在 IDE 里输了,看到包名,再去找,真他妈坑)
还有计算距离
final GeoCoder geoCoder = GeoCoder.newInstance();
ReverseGeoCodeOption option = new ReverseGeoCodeOption();
option.location(new LatLng(cleaner.latitude, cleaner.longitude));
geoCoder.reverseGeoCode(option);
geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
locationTextView.setText(reverseGeoCodeResult.getAddress());
geoCoder.destroy();
}
@Override
public void onGetGeoCodeResult(GeoCodeResult arg0) {
}
});
待解决的问题
- start activitiy out activity??? 1
- 距离的显示,米还是公里,直接用公里,精确度是100米...还是分米和公里两种吧,0.1公里,不好,格式化小数里面的学问也不小啊,new DecimalFormat("#.##").format(1.199); //"1.2"``String.format("%.2f", value) ;
3~~~~~
- 头像的展示 4
- 详情页的可切换 2 ~
- 详情页位置的显示还是不够正常;难道是顺序的问题,???~
还把 pk 写错导致经纬度一直没能更新到服务器上!!!
搞 initComm 500问题,是公司业务的问题
修改记录
将 Volley.jar 拷贝到 libs目录下
将 selector_cleaner_detail_text_color.xml 拷贝到 res/color 文件夹下
将 CleanerViewHolder 拷贝到com.diandian.housekeeping.adapter 包内
覆盖 activity_cleaner_detail.xml文件
覆盖 CleanerDetailActivity.java 文件
覆盖 Util.java 文件
覆盖 ListFragment.java 文件
覆盖 ContactActivity.java 文件
覆盖 Cleaner.java
覆盖 OrmLiteDBHelper.java
修改 InitCommunication.java
覆盖 list_item_cleaner.xml
覆盖 map_view_overlay.xml