package com.hupu.games.fragment; import java.util.LinkedList; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import com.hupu.games.R; import com.hupu.games.activity.HupuBaseActivity; import com.hupu.games.activity.HupuBaseActivity.ChatInterface; import com.hupu.games.adapter.ChatListAdapter; import com.hupu.games.common.HuPuRes; import com.hupu.games.common.HupuLog; import com.hupu.games.common.SharedPreferencesMgr; import com.hupu.games.data.ChatEntity; import com.hupu.games.data.ChatResp; import com.hupu.games.view.XListView; import com.hupu.games.view.XListView.IXListViewListener; public class ChatFragment extends BaseFragment { // private View mProgressBar; ChatInterface mAct; LinkedList<ChatEntity> mDataList; ChatListAdapter mAdapter; /***/ private int oldChatID; /***/ private int newChatID; private XListView mListViewChat; ListClick listClick; Handler handler = new Handler(); private String tag; private int mRoomId = -1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDataList = new LinkedList<ChatEntity>(); listClick = new ListClick(); } @Override public void onAttach(Activity activity) { super.onAttach(activity); mAct = (ChatInterface) getActivity(); } public void setTag(String t) { tag =t; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_chat, container, false); mListViewChat = (XListView) v.findViewById(R.id.list_chat); hint = v.findViewById(R.id.hint_layout); if(mAdapter == null) { mAdapter = new ChatListAdapter(getActivity(),tag); reqNewDataDelay(false); } mListViewChat.setAdapter(mAdapter); mListViewChat.setOnItemClickListener(listClick); mListViewChat.setXListViewListener(new pullListener()); mListViewChat.setPullLoadEnable(false,false); return v; } View hint; /** 重新刷新数据 */ public void setData(ChatResp data,int roomId) { // 有消息返回的情况下,需要先判断是推送消息,还是刷新消息,还是加载更多的消息 mRoomId = roomId; if(data.mList==null) return; if (data.pid_old == 0) { // 刷新 // 设定偏移量 mDataList = data.mList; newChatID = data.pid; if(mDataList != null ) oldChatID = data.pid - mDataList.size(); if (mDataList == null || mDataList.size() < 20 || oldChatID <2) { mListViewChat.setPullLoadEnable(false,false); } else mListViewChat.setPullLoadEnable(true,false); } else { if (data.direc.equals("next")) { // 推送过来的最新 newChatID = data.pid; if(mDataList != null ) mDataList.addAll(0, data.mList); else mDataList = data.mList; } else { // 加载更多 if(mDataList != null ) { oldChatID = data.pid - data.mList.size(); mDataList.addAll(data.mList); } else { mDataList = data.mList; } if (oldChatID < 2) mListViewChat.setPullLoadEnable(false,false); // mAct.showToast("没有更多聊天记录了"); // Log.d("setData", "load more oldChatID= " // + oldChatID); } } if (mDataList == null || mDataList.size() == 0) { hint.setVisibility(View.VISIBLE); } else { hint.setVisibility(View.GONE); mAdapter.setData(mDataList); } page = 0; } public int getLastId() { return newChatID; } public void setLastId(int id) { newChatID = id; } /** 新数据加入 */ public void addData(ChatResp data) { mAdapter.setData(mDataList); } /** 新数据加入 */ public void addData(int type ,String name, String ss) { ChatEntity entity = new ChatEntity(); //entity.username = "游客-" + name; entity.username = name; if(type == 0) entity.content = ss; else { entity.emoji=ss; entity.content ="表情"; } entity.vip=SharedPreferencesMgr.getBoolean("vip", false)?1:0; if(mDataList!=null) { HupuLog.d("old add="); mDataList.add(0, entity); mAdapter.setData(mDataList); } if(hint!=null) hint.setVisibility(View.GONE); // mListViewChat.setSelectionAfterHeaderView() ; // mListViewChat.invalidate(); } /** 清空所有数据 */ public void clearData() { if (mDataList != null) mDataList.clear(); if (mAdapter != null) { mAdapter.setData(mDataList); } } /** 获取最新数据 */ public void reqNewData() { if (mDataList == null) mListViewChat.setPullLoadEnable(false,false); mAct.reqChatData(0); } // @Override // public void entry() { // super.entry(); // if (mAct != null) // reqNewDataDelay(false) ; // if (mRoomId == ) { // // } // clearData(); // } public void entry(int roomId) { if (mAct != null) reqNewDataDelay(false) ; if (mRoomId != roomId) { clearData(); } } /** 获取最新数据 */ public void reqNewDataDelay(boolean isMan) { if (mDataList == null) mListViewChat.setPullLoadEnable(false,false); if (!isMan) { mListViewChat.setFreshState(); // mListViewChat.getChildAt(0).setVisibility(View.VISIBLE); } handler.postDelayed(new Runnable() { @Override public void run() { mAct.reqChatData(0); } }, 800); } int page; /** 获取更多数据 */ public void reqMoreData() { // Log.d("reqMoreData", "oldChatID=" + oldChatID); mAct.reqChatData(oldChatID); } /** 设置listview 上拉和下拉的监听 */ class pullListener implements IXListViewListener { @Override public void onRefresh() { reqNewDataDelay(true); } @Override public void onLoadMore() { reqMoreData(); } } /** 设置listview点击监听器 */ class ListClick implements OnItemClickListener { @Override public void onItemClick(AdapterView<?> arg0, View v, int pos, long arg3) { // if(pos<1) // return; // Intent in =new Intent(getActivity(),WebViewActivity.class); // in.putExtra("url", mAdapter.getItem(pos-1).fromurl); // startActivity(in); } } public void stopLoad() { if (mListViewChat != null) { mListViewChat.stopRefresh(); mListViewChat.stopLoadMore(); } } public void switchToWebAct(String url) { } }