PageRenderTime 74ms CodeModel.GetById 42ms RepoModel.GetById 0ms app.codeStats 0ms

/src/com/sinonetwork/zhonghua/fragment/KnowFragment.java

https://gitlab.com/zwp/Zhonghua
Java | 590 lines | 484 code | 74 blank | 32 comment | 43 complexity | 863bba17051ad30ad09d76c09309c1de MD5 | raw file
  1. package com.sinonetwork.zhonghua.fragment;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.annotation.SuppressLint;
  5. import android.app.Activity;
  6. import android.app.AlertDialog;
  7. import android.app.Dialog;
  8. import android.app.ProgressDialog;
  9. import android.content.DialogInterface;
  10. import android.content.Intent;
  11. import android.content.pm.PackageInfo;
  12. import android.content.pm.PackageManager;
  13. import android.content.pm.PackageManager.NameNotFoundException;
  14. import android.content.res.AssetManager;
  15. import android.graphics.Typeface;
  16. import android.net.Uri;
  17. import android.os.Bundle;
  18. import android.os.Handler;
  19. import android.os.Message;
  20. import android.support.v4.app.Fragment;
  21. import android.view.LayoutInflater;
  22. import android.view.View;
  23. import android.view.View.OnClickListener;
  24. import android.view.ViewGroup;
  25. import android.widget.AdapterView;
  26. import android.widget.AdapterView.OnItemClickListener;
  27. import android.widget.Button;
  28. import android.widget.EditText;
  29. import android.widget.ImageView;
  30. import android.widget.LinearLayout;
  31. import android.widget.RelativeLayout;
  32. import android.widget.TextView;
  33. import android.widget.Toast;
  34. import com.alibaba.fastjson.JSONArray;
  35. import com.alibaba.fastjson.JSONObject;
  36. import com.lidroid.xutils.exception.HttpException;
  37. import com.lidroid.xutils.http.RequestParams;
  38. import com.lidroid.xutils.http.ResponseInfo;
  39. import com.lidroid.xutils.http.callback.RequestCallBack;
  40. import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
  41. import com.sinonetwork.zhonghua.MyDengLu;
  42. import com.sinonetwork.zhonghua.PublishQuestion;
  43. import com.sinonetwork.zhonghua.R;
  44. import com.sinonetwork.zhonghua.ReplyActivity;
  45. import com.sinonetwork.zhonghua.adapter.QuestionAdapter;
  46. import com.sinonetwork.zhonghua.event.CommentEvent;
  47. import com.sinonetwork.zhonghua.event.UpEvent;
  48. import com.sinonetwork.zhonghua.model.Question;
  49. import com.sinonetwork.zhonghua.utils.HttpHelp;
  50. import com.sinonetwork.zhonghua.utils.PrefUtil;
  51. import com.sinonetwork.zhonghua.utils.URLAddress;
  52. import com.sinonetwork.zhonghua.utils.ZhAccountPrefUtil;
  53. import com.sinonetwork.zhonghua.view.MyListView;
  54. import com.sinonetwork.zhonghua.view.MyListView.OnLoadMoreListener;
  55. import com.sinonetwork.zhonghua.view.MyListView.OnRefreshListener;
  56. import de.greenrobot.event.EventBus;
  57. public class KnowFragment extends Fragment implements View.OnClickListener {
  58. private static final int LOAD_DATA_FINISH = 10;
  59. private static final int REFRESH_DATA_FINISH = 11;
  60. private static final int NO_MORE_DARA = 12;
  61. private TextView know_publish;
  62. private Button searchBtn;
  63. private EditText keywordET;
  64. private List<Question> questions = new ArrayList<Question>();
  65. private QuestionAdapter adapter;
  66. private LinearLayout write_box;
  67. private ImageView write_comments_calcel;
  68. private ImageView write_comments_ok;
  69. private EditText write_comments_edittext;
  70. private Question question;
  71. private MyListView listView;
  72. private int currentPage = 1;
  73. private int totalPage;
  74. private static final int DIALOG = 1;
  75. private ProgressDialog progressDialog;
  76. private RelativeLayout rel_first;
  77. private Handler mHandler = new Handler() {
  78. public void handleMessage(android.os.Message msg) {
  79. switch (msg.what) {
  80. case REFRESH_DATA_FINISH:
  81. if (adapter != null) {
  82. adapter = new QuestionAdapter(questions,
  83. KnowFragment.this.getActivity());
  84. adapter.setBigEventAdapterData(questions);
  85. listView.setAdapter(adapter);
  86. adapter.notifyDataSetChanged();
  87. }
  88. listView.onRefreshComplete(); // 下拉刷新完成
  89. break;
  90. case LOAD_DATA_FINISH:
  91. if (adapter != null) {
  92. adapter.setBigEventAdapterData((ArrayList<Question>) msg.obj);
  93. adapter.notifyDataSetChanged();
  94. }
  95. listView.misHaveNewDatas = false;
  96. listView.onLoadMoreComplete(); // 加载更多完成
  97. break;
  98. case NO_MORE_DARA:
  99. listView.misHaveNewDatas = false;
  100. listView.onLoadMoreComplete(); // 加载更多完成
  101. break;
  102. default:
  103. break;
  104. }
  105. };
  106. };
  107. private int mPosition = 0;
  108. @Override
  109. public void onAttach(Activity activity) {
  110. super.onAttach(activity);
  111. EventBus.getDefault().register(this);
  112. }
  113. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  114. Bundle savedInstanceState) {
  115. View knowLayout = inflater.inflate(R.layout.activity_know, container,
  116. false);
  117. // 字体设置
  118. AssetManager mgr = getActivity().getAssets();// 得到AssetManager
  119. Typeface tf = Typeface.createFromAsset(mgr, "fonts/mini.ttf");// 根据路径得到Typeface
  120. // Typeface tf2=Typeface.createFromAsset(mgr,
  121. // "fonts/mini.ttf");//根据路径得到Typeface
  122. ((TextView) knowLayout.findViewById(R.id.tv_introduction_find))
  123. .setTypeface(tf);// 设置字体
  124. ((TextView) knowLayout.findViewById(R.id.tv_know_introduction))
  125. .setTypeface(tf);// 设置字体
  126. ((TextView) knowLayout.findViewById(R.id.tv_know_introduction2))
  127. .setTypeface(tf);// 设置字体
  128. //提示设置
  129. rel_first = (RelativeLayout) knowLayout.findViewById(R.id.rel_first);
  130. if (PrefUtil.getBooleanPref(this.getActivity(), "first_know", false)) {
  131. rel_first.setVisibility(View.GONE);
  132. }
  133. ((Button) knowLayout.findViewById(R.id.btn_know))
  134. .setOnClickListener(new View.OnClickListener() {
  135. @Override
  136. public void onClick(View v) {
  137. PrefUtil.savePref(KnowFragment.this.getActivity(),
  138. "first_know", true);
  139. rel_first.setVisibility(View.GONE);
  140. }
  141. });
  142. rel_first.setOnClickListener(new View.OnClickListener() {
  143. @Override
  144. public void onClick(View v) {
  145. PrefUtil.savePref(KnowFragment.this.getActivity(),
  146. "first_know", true);
  147. rel_first.setVisibility(View.GONE);
  148. }
  149. });
  150. //初始化控件,加设置侦听。
  151. keywordET = (EditText) knowLayout.findViewById(R.id.keywordET);
  152. searchBtn = (Button) knowLayout.findViewById(R.id.searchBtn);
  153. write_box = (LinearLayout) knowLayout.findViewById(R.id.write_box);
  154. write_comments_calcel = (ImageView) knowLayout
  155. .findViewById(R.id.write_comments_calcel);
  156. write_comments_ok = (ImageView) knowLayout
  157. .findViewById(R.id.write_comments_ok);
  158. write_comments_edittext = (EditText) knowLayout
  159. .findViewById(R.id.write_comments_edittext);
  160. write_comments_calcel.setOnClickListener(this);
  161. write_comments_ok.setOnClickListener(this);
  162. searchBtn.setOnClickListener(new OnClickListener() {
  163. @Override
  164. public void onClick(View v) {
  165. currentPage = 1;
  166. questions.clear();
  167. showProgressDialog("正在加载请稍后。。。");
  168. addContent(currentPage, 0, keywordET.getText().toString());
  169. }
  170. });
  171. //对话框
  172. know_publish = (TextView) knowLayout.findViewById(R.id.know_publish);
  173. know_publish.setOnClickListener(new View.OnClickListener() {
  174. @Override
  175. public void onClick(View v) {
  176. Dialog dialog = new AlertDialog.Builder(getActivity())
  177. .setItems(new String[] { "发布问题", "在线咨询" },
  178. new DialogInterface.OnClickListener() {
  179. @Override
  180. public void onClick(DialogInterface dialog,
  181. int which) {
  182. // TODO Auto-generated method stub
  183. switch (which) {
  184. case 0:
  185. if (PrefUtil
  186. .getBooleanPref(
  187. getActivity()
  188. .getApplicationContext(),
  189. ZhAccountPrefUtil.IS_LOGINED_ACCOUNT,
  190. false)) {
  191. Intent intent = new Intent(
  192. getActivity(),
  193. PublishQuestion.class);
  194. startActivity(intent);
  195. } else {
  196. Intent intent = new Intent(
  197. getActivity(),
  198. MyDengLu.class);
  199. startActivity(intent);
  200. }
  201. break;
  202. case 1:
  203. if (isAPKInstalled()) {
  204. PackageManager pManager = getActivity()
  205. .getPackageManager();
  206. Intent intent = pManager
  207. .getLaunchIntentForPackage("com.v2");
  208. startActivity(intent);
  209. } else {
  210. Uri uri = Uri
  211. .parse("http://sxsp.agricom.com.cn/autodownload/Agricom.apk");
  212. Intent it = new Intent(
  213. Intent.ACTION_VIEW, uri);
  214. startActivity(it);
  215. }
  216. break;
  217. }
  218. dialog.dismiss();
  219. }
  220. }).show();
  221. // createDialog();
  222. }
  223. });
  224. listView = (MyListView) knowLayout.findViewById(R.id.lv);
  225. adapter = new QuestionAdapter(questions, this.getActivity());
  226. listView.setAdapter(adapter);
  227. listView.setOnRefreshListener(new OnRefreshListener() {
  228. @Override
  229. public void onRefresh() {
  230. // TODO 下拉刷新
  231. loadData(0);
  232. }
  233. });
  234. listView.setOnLoadListener(new OnLoadMoreListener() {
  235. @Override
  236. public void onLoadMore() {
  237. // TODO 加载更多
  238. loadData(1);
  239. }
  240. });
  241. // 添加加载更多 footer view
  242. loadData(0);
  243. listView.setOnItemClickListener(new OnItemClickListener() {
  244. @Override
  245. public void onItemClick(AdapterView<?> parent, View view,
  246. int position, long id) {
  247. Intent intent = new Intent(KnowFragment.this.getActivity(),
  248. ReplyActivity.class);
  249. Question question = questions.get(position - 1);
  250. String questionId = questions.get(position - 1).getId() + "";
  251. String userName = questions.get(position - 1).getUserName1()
  252. + "";
  253. intent.putExtra("questionId", questionId);
  254. intent.putExtra("userName", userName);
  255. intent.putExtra("question", question);
  256. startActivity(intent);
  257. }
  258. });
  259. return knowLayout;
  260. }
  261. public void loadData(final int type) {
  262. new Thread() {
  263. @Override
  264. public void run() {
  265. switch (type) {
  266. case 0:
  267. questions.clear();
  268. currentPage = 1;
  269. addContent(currentPage, 0, keywordET.getText().toString());
  270. break;
  271. case 1:
  272. currentPage++;
  273. if (currentPage <= totalPage) {
  274. addContent(currentPage, 1, keywordET.getText()
  275. .toString());
  276. } else {
  277. currentPage--;
  278. Message _Msg = mHandler.obtainMessage(NO_MORE_DARA);
  279. mHandler.sendMessage(_Msg);
  280. }
  281. break;
  282. }
  283. }
  284. }.start();
  285. }
  286. public void addContent(int currentPage, final int type, String text) {
  287. RequestParams params = new RequestParams();
  288. params.addBodyParameter("method", "searchQuestions");
  289. params.addBodyParameter("pageRows", "10");
  290. params.addBodyParameter("curPage", currentPage + "");
  291. if (!text.equals("")) {
  292. params.addBodyParameter("questionTitle", text);
  293. }
  294. HttpHelp.getInstance().send(HttpMethod.POST, URLAddress.URLER, params,
  295. new RequestCallBack<String>() {
  296. @Override
  297. public void onFailure(HttpException arg0, String arg1) {
  298. closeProgressDialog();
  299. Toast.makeText(KnowFragment.this.getActivity(),
  300. "加载失败。。", 2000).show();
  301. }
  302. @Override
  303. public void onSuccess(ResponseInfo<String> resultInfo) {
  304. System.out.println("数据:"+resultInfo.result);
  305. closeProgressDialog();
  306. JSONObject jsonObject = JSONObject
  307. .parseObject(resultInfo.result);
  308. JSONObject json = JSONObject.parseObject(jsonObject
  309. .toString());
  310. totalPage = json.getIntValue("totalPages");
  311. List<Question> datas = JSONArray.parseArray(json
  312. .getJSONArray("resultdata").toJSONString(),
  313. Question.class);
  314. questions.addAll(datas);
  315. if (type == 0) { // 下拉刷新
  316. // Collections.reverse(mList); //逆序
  317. Message _Msg = mHandler.obtainMessage(
  318. REFRESH_DATA_FINISH, questions);
  319. mHandler.sendMessage(_Msg);
  320. } else if (type == 1) {
  321. Message _Msg = mHandler.obtainMessage(
  322. LOAD_DATA_FINISH, questions);
  323. mHandler.sendMessage(_Msg);
  324. }
  325. adapter.setBigEventAdapterData(questions);
  326. adapter.notifyDataSetChanged();
  327. // setData();
  328. // listView.setSelection(mPosition);
  329. }
  330. });
  331. }
  332. // public void setData() {
  333. // if (questions.size() != 0) {
  334. // adapter.notifyDataSetChanged();
  335. // }
  336. // }
  337. //
  338. //混淆时出错,并不知道onEvent干什么用,用来接受消息
  339. public void onEvent(CommentEvent event) {
  340. if (PrefUtil.getBooleanPref(getActivity().getApplicationContext(),
  341. ZhAccountPrefUtil.IS_LOGINED_ACCOUNT, false)) {
  342. write_box.setVisibility(View.VISIBLE);
  343. write_comments_edittext.requestFocus();
  344. question = event.question;
  345. mPosition = event.position;
  346. } else {
  347. Toast.makeText(KnowFragment.this.getActivity(), "您尚未登录!", 2000)
  348. .show();
  349. }
  350. }
  351. //混淆时出错,并不知道onEvent干什么用
  352. public void onEvent(UpEvent event) {
  353. if (PrefUtil.getBooleanPref(getActivity().getApplicationContext(),
  354. ZhAccountPrefUtil.IS_LOGINED_ACCOUNT, false)) {
  355. question = event.question;
  356. mPosition = event.position;
  357. RequestParams params = new RequestParams();
  358. params.addBodyParameter("method", "addQuestionClickNum");
  359. params.addBodyParameter("id", question.getId() + "");
  360. params.addBodyParameter("userName", PrefUtil.getStringPref(
  361. this.getActivity(), "zhonghua_userName"));
  362. HttpHelp.getInstance().send(HttpMethod.POST, URLAddress.URLER,
  363. params, new RequestCallBack<String>() {
  364. @Override
  365. public void onFailure(HttpException arg0, String arg1) {
  366. }
  367. @Override
  368. public void onSuccess(ResponseInfo<String> resultInfo) {
  369. JSONObject jsonObject = JSONObject
  370. .parseObject(resultInfo.result);
  371. if (jsonObject.getString("resultcode").equals("ok")) {
  372. Toast.makeText(KnowFragment.this.getActivity(),
  373. "点赞成功", 2000).show();
  374. updataView();
  375. } else {
  376. Toast.makeText(KnowFragment.this.getActivity(),
  377. jsonObject.getString("resultdesc"),
  378. 2000).show();
  379. }
  380. }
  381. });
  382. } else {
  383. Toast.makeText(KnowFragment.this.getActivity(), "您尚未登录!", 2000)
  384. .show();
  385. }
  386. }
  387. /**
  388. * 刷新视图
  389. */
  390. public void updataView() {
  391. RequestParams params2 = new RequestParams();
  392. params2.addBodyParameter("method", "searchQuestions");
  393. params2.addBodyParameter("pageRows", "10");
  394. params2.addBodyParameter("curPage", getPostPage(mPosition) + "");
  395. HttpHelp.getInstance().send(HttpMethod.POST, URLAddress.URLER, params2,
  396. new RequestCallBack<String>() {
  397. @Override
  398. public void onFailure(HttpException arg0, String arg1) {
  399. }
  400. @Override
  401. public void onSuccess(ResponseInfo<String> resultInfo) {
  402. JSONObject jsonObject = JSONObject
  403. .parseObject(resultInfo.result);
  404. JSONObject json = JSONObject.parseObject(jsonObject
  405. .toString());
  406. List<Question> datas = JSONArray.parseArray(json
  407. .getJSONArray("resultdata").toJSONString(),
  408. Question.class);
  409. for (int i = 0; i < datas.size(); i++) {
  410. if (datas.get(i).getId() == question.getId()) {
  411. questions.remove(mPosition);
  412. questions.add(mPosition, datas.get(i));
  413. }
  414. }
  415. adapter = new QuestionAdapter(questions,
  416. KnowFragment.this.getActivity());
  417. adapter.setBigEventAdapterData(questions);
  418. listView.setAdapter(adapter);
  419. adapter.notifyDataSetChanged();
  420. listView.setSelection(mPosition + 1);
  421. }
  422. });
  423. }
  424. @Override
  425. public void onDestroy() {
  426. super.onDestroy();
  427. EventBus.getDefault().unregister(this);
  428. }
  429. @Override
  430. public void onClick(View v) {
  431. switch (v.getId()) {
  432. case R.id.write_comments_calcel:
  433. write_box.setVisibility(View.GONE);
  434. break;
  435. case R.id.write_comments_ok:
  436. if (write_comments_edittext.getText().toString().equals("")) {
  437. Toast.makeText(this.getActivity(), "请输入评论内容", 2000).show();
  438. return;
  439. }
  440. RequestParams params = new RequestParams();
  441. params.addBodyParameter("method", "addReply");
  442. params.addBodyParameter("replyText", write_comments_edittext
  443. .getText().toString());
  444. params.addBodyParameter("questionId", question.getId() + "");
  445. params.addBodyParameter("userName", PrefUtil.getStringPref(
  446. this.getActivity(), "zhonghua_userName"));
  447. HttpHelp.getInstance().send(HttpMethod.POST, URLAddress.URLER,
  448. params, new RequestCallBack<String>() {
  449. @Override
  450. public void onFailure(HttpException arg0, String arg1) {
  451. }
  452. @Override
  453. public void onSuccess(ResponseInfo<String> resultInfo) {
  454. JSONObject jsonObject = JSONObject
  455. .parseObject(resultInfo.result);
  456. if (jsonObject.getString("resultcode").equals("ok")) {
  457. Toast.makeText(KnowFragment.this.getActivity(),
  458. "评论成功", 2000).show();
  459. updataView();
  460. }
  461. }
  462. });
  463. write_comments_edittext.setText("");
  464. write_box.setVisibility(View.GONE);
  465. break;
  466. default:
  467. break;
  468. }
  469. }
  470. public int getPostPage(int position) {
  471. return (position / 10) + 1;
  472. }
  473. private boolean isAPKInstalled() {
  474. PackageInfo pInfo;
  475. try {
  476. pInfo = getActivity().getPackageManager().getPackageInfo("com.v2",
  477. 0);
  478. } catch (NameNotFoundException e) {
  479. // TODO Auto-generated catch block
  480. pInfo = null;
  481. e.printStackTrace();
  482. }
  483. if (pInfo == null) {
  484. return false;
  485. } else {
  486. return true;
  487. }
  488. }
  489. public void showProgressDialog(String message) {
  490. if (progressDialog == null) {
  491. progressDialog = new ProgressDialog(this.getActivity());
  492. progressDialog.setCancelable(false);
  493. }
  494. if (message == null) {
  495. progressDialog.setMessage("数据加载中...");
  496. } else {
  497. progressDialog.setMessage(message);
  498. }
  499. progressDialog.show();
  500. }
  501. public void closeProgressDialog() {
  502. if (progressDialog != null && progressDialog.isShowing()) {
  503. progressDialog.dismiss();
  504. progressDialog = null;
  505. }
  506. }
  507. @SuppressLint("NewApi")
  508. private void createDialog() {
  509. // MyDialog dialog = new MyDialog(getActivity());
  510. // dialog.show();
  511. // Builder builder = new AlertDialog.Builder
  512. // (getActivity(), R.style.custom_dialog);
  513. // builder.setMessage("sdfsdf");
  514. // builder.show();
  515. }
  516. }