package com.app.fragment;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.alibaba.fastjson.JSON;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.Request.Method;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.JsonRequest;
import com.android.volley.toolbox.Volley;
import com.app.adapter.Messageadapter;
import com.app.function.Configuration;
import com.app.function.DynamicMessage;
import com.app.function.EditTextSpuer;
import com.app.function.UserInfo;
import com.app.interFace.IndexListItemClickHelp;
import com.app.interFace.ThirdPartyLoginCallBack;
import com.app.xlistview.XListView;
import com.app.xlistview.XListView.IXListViewListener;
import com.ldxy.letsgoo.Detailpage;
import com.ldxy.letsgoo.R;
import android.app.ActionBar.LayoutParams;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.animation.AnimationUtils;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class FragmentMessage extends Fragment implements IXListViewListener,
IndexListItemClickHelp, ThirdPartyLoginCallBack {
private XListView mylistview;
private Messageadapter messageadapter;
private static List<DynamicMessage> messagelist;
private RequestQueue mRequestQueue;
private Handler mhandler;
private Intent intent;
private int index = 0;
private int lastActivityId = 0;
private static Integer user_id;
private static EditTextSpuer comment_edit;
private static TextView send;
private DynamicMessage message = null;
private String successresponse = null;
private static View child = null;
private static PopupWindow mpopupWindow;
private static String texthint;
private ImageView message_blank;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_message, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initView();
}
@Override
public void onResume() {
if (!UserInfo.isEmpty()) {
user_id = UserInfo.user.getUser_id();
initData();
getData(1);
} else {
message_blank.setVisibility(View.VISIBLE);
}
super.onResume();
}
private void initView() {
mylistview = (XListView) getActivity().findViewById(
R.id.message_listview);
message_blank = (ImageView) getActivity().findViewById(
R.id.message_blank);
}
private void initData() {
intent = new Intent();
mhandler = new Handler();
mRequestQueue = Volley.newRequestQueue(getActivity());
messagelist = new ArrayList<DynamicMessage>();
mylistview.setPullRefreshEnable(true);
mylistview.setPullLoadEnable(true);
messageadapter = new Messageadapter(getActivity(), messagelist, this);
mylistview.setAdapter(messageadapter);
mylistview.setXListViewListener(this);
mylistview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view,
int position, long id) {
intent.putExtra("activityid", messagelist.get(position - 1)
.getActivity_id());
intent.setClass(getActivity(), Detailpage.class);
startActivity(intent);
}
});
mylistview.startLoadMorePic();
}
// 回复点击
@Override
public void onClick(View item, View widget, int position, int which) {
message = messagelist.get(position);
child = mylistview.getChildAt(position + 1);
texthint = "回复给:" + message.getNickname();
mylistview.setSelection(position + 1);
ReplyBox();
popupInputMethodWindow();
}
private void getData(final int method) {
String url = Configuration.getdynamicmessagesUrl + "?index=" + index
+ "&&user_id=" + user_id;
JsonArrayRequest jar = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
List<DynamicMessage> list = JSON.parseArray(
response.toString(), DynamicMessage.class);
if (method == 1) {
messagelist.clear();
}
for (int i = 0; i < list.size(); i++) {
messagelist.add(list.get(i));
}
if (!messagelist.isEmpty()) {
lastActivityId = messagelist.get(
messagelist.size() - 1).getDynamic_id();
}
if (!messagelist.isEmpty()) {
messageadapter.notifyDataSetChanged();
mylistview.stopLoadMorePic();
onLoad();
} else {
// 消息列表为空时f
mylistview.setVisibility(View.GONE);
message_blank.setVisibility(View.VISIBLE);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getActivity().getApplicationContext(),
"消息获取失败", Toast.LENGTH_SHORT).show();
mylistview.stopLoadMorePic();
if (messagelist.isEmpty()) {
message_blank.setVisibility(View.VISIBLE);
mylistview.setVisibility(View.GONE);
}
mylistview.stopRefresh();
mylistview.stopLoadMore();
}
});
mRequestQueue.add(jar);
}
private void postMessage() {
Map<String, Object> params = new HashMap<String, Object>();
params.put("executor_id", user_id);
params.put("suffer_id", message.getExecutor_id());
params.put("comment", comment_edit.getText().toString().trim());
params.put("activity_id", message.getActivity_id());
params.put("updated_at", Configuration.getNowUTCtime());
params.put("operate_type", 4);
String url = Configuration.dynamicsUrl;
JSONObject jsonobject = new JSONObject(params);
JsonRequest<JSONObject> jr = null;
jr = new JsonObjectRequest(Method.POST, url, jsonobject,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
successresponse = response.get("success")
.toString();
} catch (JSONException e) {
e.printStackTrace();
}
if (successresponse.equals("1")) {
InputMethodManager imm = (InputMethodManager) comment_edit
.getContext().getSystemService(
Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.hideSoftInputFromWindow(mpopupWindow
.getContentView().getWindowToken(), 0);
mpopupWindow.dismiss();
}
// 添加数据到item
if (child != null) {
LinearLayout text = (LinearLayout) child
.findViewById(R.id.message_reply);
String comment = comment_edit.getText()
.toString().trim();
String msg = UserInfo.user.getNickname() + ":"
+ comment;
TextView reply = new TextView(getActivity());
reply.setTextSize(18);
reply.setText(msg);
text.addView(reply);
child.invalidate();
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getActivity().getApplicationContext(),
"回复失败", Toast.LENGTH_SHORT).show();
}
});
mRequestQueue.add(jr);
}
@Override
public void onRefresh() {
mhandler.postDelayed(new Runnable() {
@Override
public void run() {
child = null;
index = 0;
lastActivityId = 0;
getData(1);
}
}, 2000);
}
@Override
public void onLoadMore() {
mhandler.postDelayed(new Runnable() {
@Override
public void run() {
index = lastActivityId;
getData(2);
}
}, 2000);
}
private void onLoad() {
mylistview.stopRefresh();
mylistview.stopLoadMore();
}
public void ReplyBox() {
final View view = View.inflate(getActivity(),
R.layout.message_replybox, null);
comment_edit = (EditTextSpuer) view
.findViewById(R.id.message_replybox_edit);
send = (TextView) view.findViewById(R.id.message_replybox_send);
TextView dismiss = (TextView) view.findViewById(R.id.message_replytop);
send.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(comment_edit.getText().toString().trim())) {
Toast.makeText(getActivity(), "请填写回复内容", Toast.LENGTH_SHORT)
.show();
} else {
postMessage();
}
}
});
dismiss.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
InputMethodManager imm = (InputMethodManager) comment_edit
.getContext().getSystemService(
Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
mpopupWindow.dismiss();
}
});
view.startAnimation(AnimationUtils.loadAnimation(getActivity(),
R.anim.fade_in));
if (mpopupWindow == null) {
mpopupWindow = new PopupWindow(getActivity());
mpopupWindow.setWidth(LayoutParams.MATCH_PARENT);
mpopupWindow.setHeight(LayoutParams.WRAP_CONTENT);
mpopupWindow.setBackgroundDrawable(new ColorDrawable());
mpopupWindow.setFocusable(true);
mpopupWindow.setTouchable(true);
mpopupWindow.setOutsideTouchable(true);
mpopupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
mpopupWindow
.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
}
mpopupWindow.setContentView(view);
comment_edit.requestFocus();
comment_edit.setText("");
comment_edit.setHint(texthint);
comment_edit.setHintTextColor(getResources()
.getColor(R.color.hintcolor));
mpopupWindow.showAtLocation(mylistview, Gravity.BOTTOM, 0, 0);
mpopupWindow.update();
}
private void popupInputMethodWindow() {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
InputMethodManager imm = (InputMethodManager) getActivity()
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
InputMethodManager.HIDE_NOT_ALWAYS);
}
}
}, 0);
}
public static void hiddenpopupWindow() {
if (mpopupWindow != null && mpopupWindow.isShowing()) {
InputMethodManager imm = (InputMethodManager) comment_edit
.getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.hideSoftInputFromWindow(mpopupWindow.getContentView()
.getWindowToken(), 0);
}
mpopupWindow.dismiss();
mpopupWindow = null;
}
}
@Override
public void donelogin() {
this.onResume();
}
}