package com.hua.goddess.fragment; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.TextUtils; import android.view.InflateException; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.hua.goddess.R; import com.hua.goddess.activites.ContentActivity; import com.hua.goddess.activites.ContentActivity.CloseSoftKeyboardListener; import com.hua.goddess.activites.WebViewActivity; import com.hua.goddess.base.communicate.GetChatInterface; import com.hua.goddess.vo.ChatMessageVO; public class ChatSecretaryFragment extends Fragment implements CloseSoftKeyboardListener { private static View currentView = null; private ListView cListView; private EditText cEditText; private Button cButton; private ArrayList<ChatMessageVO> listChat = new ArrayList<ChatMessageVO>(); private Context context; private double currentTime = 0, oldTime = 0; private ChatMessAdapter cAdapter; private InputMethodManager imm; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { context = getActivity(); imm = (InputMethodManager) getActivity().getSystemService( Context.INPUT_METHOD_SERVICE); if (currentView != null) { ViewGroup parent = (ViewGroup) currentView.getParent(); if (parent != null) parent.removeView(currentView); } try { currentView = inflater.inflate(R.layout.fragment_chat, container, false); } catch (InflateException e) { /* map is already there, just return view as it is */ e.printStackTrace(); } initView(); return currentView; } private void initView() { cListView = (ListView) currentView.findViewById(R.id.chat_listview); cEditText = (EditText) currentView.findViewById(R.id.chat_editmessage); cButton = (Button) currentView.findViewById(R.id.chat_send); cButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { sendMessage(); } }); addChatVo(true, getRandomWelcomeTips()); cAdapter = new ChatMessAdapter(); cListView.setAdapter(cAdapter); ((ContentActivity) context).registerMyTouchListener(this); } private String getRandomWelcomeTips() { String[] chat_array = this.getResources().getStringArray( R.array.chat_tips); int index = (int) (Math.random() * (chat_array.length - 1)); return chat_array[index]; } private void sendMessage() { getTime(); String content_str = cEditText.getText().toString().replace(" ", "") .replace("\n", "").trim(); if (!TextUtils.isEmpty(content_str)) { cEditText.setText(""); addChatVo(false, content_str); cAdapter.notifyDataSetChanged(); cListView.setSelection(listChat.size()); ChatTask task = new ChatTask(); task.execute(content_str); } else { Toast.makeText(context, "请输入内容!", Toast.LENGTH_SHORT).show(); } } public void addChatVo(boolean ifComMeg, String content) { ChatMessageVO vo = new ChatMessageVO(); vo.setComMeg(ifComMeg); vo.setDate(getTime()); vo.setText(content); listChat.add(vo); } class ChatTask extends AsyncTask<String, Void, ChatMessageVO> { @Override protected ChatMessageVO doInBackground(String... params) { ChatMessageVO vo = null; try { vo = GetChatInterface.getNetData(params[0]); } catch (Exception e) { e.printStackTrace(); } return vo; } @Override protected void onPostExecute(ChatMessageVO result) { super.onPostExecute(result); if (result != null) { result.setDate(getTime()); result.setComMeg(true); listChat.add(result); cAdapter.notifyDataSetChanged(); cListView.setSelection(listChat.size()); } } } class ChatMessAdapter extends BaseAdapter { ChatItemHolder cHolder; final int TYPE_LEFT = 0; final int TYPE_RIGHT = 1; @Override public int getCount() { // TODO Auto-generated method stub return listChat.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return listChat.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public int getItemViewType(int position) { // TODO Auto-generated method stub return listChat.get(position).isComMeg() ? TYPE_LEFT : TYPE_RIGHT; } @Override public int getViewTypeCount() { // TODO Auto-generated method stub return 2; } @Override public View getView(final int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); if (convertView == null) { switch (type) { case TYPE_LEFT: convertView = LayoutInflater.from(context).inflate( R.layout.chatting_item_msg_text_left, null); cHolder = new ChatItemHolder(); cHolder.sendtime = (TextView) convertView .findViewById(R.id.tv_sendtime); cHolder.chatcontent = (TextView) convertView .findViewById(R.id.tv_chatcontent); convertView.setTag(cHolder); break; case TYPE_RIGHT: convertView = LayoutInflater.from(context).inflate( R.layout.chatting_item_msg_text_right, null); cHolder = new ChatItemHolder(); cHolder.chatcontent = (TextView) convertView .findViewById(R.id.tv_chatcontent); convertView.setTag(cHolder); break; default: break; } } else { switch (type) { case TYPE_LEFT: cHolder = (ChatItemHolder) convertView.getTag(); break; case TYPE_RIGHT: cHolder = (ChatItemHolder) convertView.getTag(); break; default: break; } } switch (type) { case TYPE_LEFT: if (!TextUtils.isEmpty(listChat.get(position).getDate())) { cHolder.sendtime.setVisibility(View.VISIBLE); cHolder.sendtime.setText(listChat.get(position).getDate()); } else { cHolder.sendtime.setVisibility(View.GONE); } break; } if (!TextUtils.isEmpty(listChat.get(position).getUrl())) { cHolder.chatcontent.setText(listChat.get(position).getText() + ",点我查看哦!"); cHolder.chatcontent.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(context, WebViewActivity.class); intent.putExtra("url", listChat.get(position).getUrl()); context.startActivity(intent); } }); } else { cHolder.chatcontent.setText(listChat.get(position).getText()); cHolder.chatcontent.setOnClickListener(null); } return convertView; } } class ChatItemHolder { TextView sendtime; TextView chatcontent; } private String getTime() { currentTime = System.currentTimeMillis(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Date curDate = new Date(); String str = format.format(curDate); if (currentTime - oldTime >= 500) { oldTime = currentTime; return str; } else { return ""; } } @Override public void onDestroyView() { super.onDestroyView(); ((ContentActivity) context).unRegisterMyTouchListener(this); } @Override public void onCloseListener() { imm.hideSoftInputFromWindow(cEditText.getWindowToken(), 0); } }