package cn.qylk.fragment;
import android.app.Fragment;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import cn.qylk.app.APP;
import cn.qylk.app.ListTypeInfo;
import cn.qylk.utils.SendAction;
public abstract class Fragment_ListFragmentBase extends Fragment implements
OnScrollListener, Callback {
protected ListView listview;
protected BaseAdapter adapter;
private WindowManager mWindowManager;
private TextView FirstLetterTip;
private CharSequence mPrevLetter = "";
protected Handler handler = new Handler(this);;
protected ListTypeInfo ListInfo;
public Fragment_ListFragmentBase(ListTypeInfo listInfo) {
ListInfo = listInfo;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
FirstLetterTip = new TextView(inflater.getContext());
FirstLetterTip.setWidth(60);
FirstLetterTip.setHeight(60);
FirstLetterTip.setTextColor(Color.BLUE);
FirstLetterTip.setTextSize(26);
FirstLetterTip.setBackgroundColor(Color.YELLOW);
FirstLetterTip.setGravity(Gravity.CENTER);
mWindowManager = (WindowManager) getActivity().getSystemService(
Context.WINDOW_SERVICE);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
mWindowManager.addView(FirstLetterTip, lp);
View v = InitView(inflater, container, savedInstanceState);
listview.setOnScrollListener(this);
updateList();
FirstLetterTip.setVisibility(View.INVISIBLE);
return v;
}
protected abstract View InitView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState);
protected abstract Cursor getCursor();
public void updateList() {
ListTypeInfo info = APP.list.getTypeInfo();
((CommonAdapter) adapter).setId(info.para);
adapter.notifyDataSetInvalidated();
}
protected Cursor fetchCursor() {
return ((CommonAdapter) adapter).getCursor();
}
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case 0:
ReFreshList();
break;
case 1:
FirstLetterTip.setVisibility(View.INVISIBLE);
break;
}
return true;
}
private void ReFreshList() {
((CommonAdapter) adapter).RefreshList(getCursor());
SendAction.SendListChangedSignal(ListInfo);
}
@Override
public void onDestroyView() {
mWindowManager.removeView(FirstLetterTip);
super.onDestroyView();
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (totalItemCount < firstVisibleItem + 5)
return;
CharSequence head = ((CommonAdapter) adapter)
.getFirstChar(firstVisibleItem + 4);
if (!head.equals(mPrevLetter)) {
FirstLetterTip.setVisibility(View.VISIBLE);
FirstLetterTip.setText(head);
handler.removeMessages(1);
handler.sendEmptyMessageDelayed(1, 1000);
mPrevLetter = head;
}
}
}