package net.oschina.app.ui; import java.util.ArrayList; import java.util.Date; import java.util.List; import net.oschina.app.AppConfig; import net.oschina.app.AppContext; import net.oschina.app.AppException; import net.oschina.app.R; import net.oschina.app.adapter.ListViewCommentAdapter; import net.oschina.app.bean.Comment; import net.oschina.app.bean.CommentList; import net.oschina.app.bean.FavoriteList; import net.oschina.app.bean.News; import net.oschina.app.bean.News.Relative; import net.oschina.app.bean.Notice; import net.oschina.app.bean.Result; import net.oschina.app.common.StringUtils; import net.oschina.app.common.UIHelper; import net.oschina.app.widget.BadgeView; import net.oschina.app.widget.PullToRefreshListView; import android.annotation.SuppressLint; import android.app.ProgressDialog; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.GestureDetector; import android.view.Gravity; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.webkit.WebView; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.ScrollView; import android.widget.TextView; import android.widget.ViewSwitcher; /** * 新闻详情 * * @author liux (http://my.oschina.net/liux) * @version 1.0 * @created 2012-3-21 */ public class NewsDetail extends BaseActivity { private FrameLayout mHeader; private LinearLayout mFooter; private ImageView mHome; private ImageView mFavorite; private ImageView mRefresh; private TextView mHeadTitle; private ProgressBar mProgressbar; private ScrollView mScrollView; private ViewSwitcher mViewSwitcher; private BadgeView bv_comment; private ImageView mDetail; private ImageView mCommentList; private ImageView mShare; private TextView mTitle; private TextView mAuthor; private TextView mPubDate; private TextView mCommentCount; private WebView mWebView; private Handler mHandler; private News newsDetail; private int newsId; private final static int VIEWSWITCH_TYPE_DETAIL = 0x001; private final static int VIEWSWITCH_TYPE_COMMENTS = 0x002; private final static int DATA_LOAD_ING = 0x001; private final static int DATA_LOAD_COMPLETE = 0x002; private final static int DATA_LOAD_FAIL = 0x003; private PullToRefreshListView mLvComment; private ListViewCommentAdapter lvCommentAdapter; private List<Comment> lvCommentData = new ArrayList<Comment>(); private View lvComment_footer; private TextView lvComment_foot_more; private ProgressBar lvComment_foot_progress; private Handler mCommentHandler; private int lvSumData; private int curId; private int curCatalog; private int curLvDataState; private int curLvPosition;// 当前listview选中的item位置 private ViewSwitcher mFootViewSwitcher; private ImageView mFootEditebox; private EditText mFootEditer; private Button mFootPubcomment; private ProgressDialog mProgress; private InputMethodManager imm; private String tempCommentKey = AppConfig.TEMP_COMMENT; private int _catalog; private int _id; private int _uid; private String _content; private int _isPostToMyZone; private GestureDetector gd; private boolean isFullScreen; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.news_detail); this.initView(); this.initData(); // 加载评论视图&数据 this.initCommentView(); this.initCommentData(); // 注册双击全屏事件 this.regOnDoubleEvent(); } // 隐藏输入发表回帖状态 private void hideEditor(View v) { imm.hideSoftInputFromWindow(v.getWindowToken(), 0); if(mFootViewSwitcher.getDisplayedChild()==1){ mFootViewSwitcher.setDisplayedChild(0); mFootEditer.clearFocus(); mFootEditer.setVisibility(View.GONE); } } // 初始化视图控件 @SuppressLint("SetJavaScriptEnabled") private void initView() { newsId = getIntent().getIntExtra("news_id", 0); if (newsId > 0) tempCommentKey = AppConfig.TEMP_COMMENT + "_" + CommentList.CATALOG_NEWS + "_" + newsId; mHeader = (FrameLayout) findViewById(R.id.news_detail_header); mFooter = (LinearLayout) findViewById(R.id.news_detail_footer); mHome = (ImageView) findViewById(R.id.news_detail_home); mRefresh = (ImageView) findViewById(R.id.news_detail_refresh); mHeadTitle = (TextView) findViewById(R.id.news_detail_head_title); mProgressbar = (ProgressBar) findViewById(R.id.news_detail_head_progress); mViewSwitcher = (ViewSwitcher) findViewById(R.id.news_detail_viewswitcher); mScrollView = (ScrollView) findViewById(R.id.news_detail_scrollview); mDetail = (ImageView) findViewById(R.id.news_detail_footbar_detail); mCommentList = (ImageView) findViewById(R.id.news_detail_footbar_commentlist); mShare = (ImageView) findViewById(R.id.news_detail_footbar_share); mFavorite = (ImageView) findViewById(R.id.news_detail_footbar_favorite); mTitle = (TextView) findViewById(R.id.news_detail_title); mAuthor = (TextView) findViewById(R.id.news_detail_author); mPubDate = (TextView) findViewById(R.id.news_detail_date); mCommentCount = (TextView) findViewById(R.id.news_detail_commentcount); mDetail.setEnabled(false); mWebView = (WebView) findViewById(R.id.news_detail_webview); mWebView.getSettings().setSupportZoom(true); mWebView.getSettings().setBuiltInZoomControls(true); mWebView.getSettings().setDefaultFontSize(15); UIHelper.addWebImageShow(this, mWebView); mHome.setOnClickListener(homeClickListener); mFavorite.setOnClickListener(favoriteClickListener); mRefresh.setOnClickListener(refreshClickListener); mAuthor.setOnClickListener(authorClickListener); mShare.setOnClickListener(shareClickListener); mDetail.setOnClickListener(detailClickListener); mCommentList.setOnClickListener(commentlistClickListener); bv_comment = new BadgeView(this, mCommentList); bv_comment.setBackgroundResource(R.drawable.widget_count_bg2); bv_comment.setIncludeFontPadding(false); bv_comment.setGravity(Gravity.CENTER); bv_comment.setTextSize(8f); bv_comment.setTextColor(Color.WHITE); imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); mFootViewSwitcher = (ViewSwitcher) findViewById(R.id.news_detail_foot_viewswitcher); mFootPubcomment = (Button) findViewById(R.id.news_detail_foot_pubcomment); mFootPubcomment.setOnClickListener(commentpubClickListener); mFootEditebox = (ImageView) findViewById(R.id.news_detail_footbar_editebox); mFootEditebox.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { mFootViewSwitcher.showNext(); mFootEditer.setVisibility(View.VISIBLE); mFootEditer.requestFocus(); mFootEditer.requestFocusFromTouch(); } }); mFootEditer = (EditText) findViewById(R.id.news_detail_foot_editer); mFootEditer.setOnFocusChangeListener(new View.OnFocusChangeListener() { public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { imm.showSoftInput(v, 0); } else { imm.hideSoftInputFromWindow(v.getWindowToken(), 0); } } }); mFootEditer.setOnKeyListener(new View.OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { hideEditor(v); return true; } return false; } }); // 编辑器添加文本监听 mFootEditer.addTextChangedListener(UIHelper.getTextWatcher(this, tempCommentKey)); // 显示临时编辑内容 UIHelper.showTempEditContent(this, mFootEditer, tempCommentKey); } // 初始化控件数据 private void initData() { mHandler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 1) { headButtonSwitch(DATA_LOAD_COMPLETE); mTitle.setText(newsDetail.getTitle()); mAuthor.setText(newsDetail.getAuthor()); mPubDate.setText(StringUtils.friendly_time(newsDetail .getPubDate())); mCommentCount.setText(String.valueOf(newsDetail .getCommentCount())); // 是否收藏 if (newsDetail.getFavorite() == 1) mFavorite .setImageResource(R.drawable.widget_bar_favorite2); else mFavorite .setImageResource(R.drawable.widget_bar_favorite); // 显示评论数 if (newsDetail.getCommentCount() > 0) { bv_comment.setText(newsDetail.getCommentCount() + ""); bv_comment.show(); } else { bv_comment.setText(""); bv_comment.hide(); } String body = UIHelper.WEB_STYLE + newsDetail.getBody(); // 读取用户设置:是否加载文章图片--默认有wifi下始终加载图片 boolean isLoadImage; AppContext ac = (AppContext) getApplication(); if (AppContext.NETTYPE_WIFI == ac.getNetworkType()) { isLoadImage = true; } else { isLoadImage = ac.isLoadImage(); } if (isLoadImage) { // 过滤掉 img标签的width,height属性 body = body.replaceAll( "(<img[^>]*?)\\s+width\\s*=\\s*\\S+", "$1"); body = body.replaceAll( "(<img[^>]*?)\\s+height\\s*=\\s*\\S+", "$1"); // 添加点击图片放大支持 body = body.replaceAll("(<img[^>]+src=\")(\\S+)\"", "$1$2\" onClick=\"javascript:mWebViewImageListener.onImageClick('$2')\""); } else { // 过滤掉 img标签 body = body.replaceAll("<\\s*img\\s+([^>]*)\\s*>", ""); } // 更多关于***软件的信息 String softwareName = newsDetail.getSoftwareName(); String softwareLink = newsDetail.getSoftwareLink(); if (!StringUtils.isEmpty(softwareName) && !StringUtils.isEmpty(softwareLink)) body += String .format("<div id='oschina_software' style='margin-top:8px;color:#FF0000;font-weight:bold'>更多关于: <a href='%s'>%s</a> 的详细信息</div>", softwareLink, softwareName); // 相关新闻 if (newsDetail.getRelatives().size() > 0) { String strRelative = ""; for (Relative relative : newsDetail.getRelatives()) { strRelative += String .format("<a href='%s' style='text-decoration:none'>%s</a><p/>", relative.url, relative.title); } body += String.format( "<p/><hr/><b>相关资讯</b><div><p/>%s</div>", strRelative); } body += "<div style='margin-bottom: 80px'/>"; System.out.println(body); mWebView.loadDataWithBaseURL(null, body, "text/html", "utf-8", null); mWebView.setWebViewClient(UIHelper.getWebViewClient()); // 发送通知广播 if (msg.obj != null) { UIHelper.sendBroadCast(NewsDetail.this, (Notice) msg.obj); } } else if (msg.what == 0) { headButtonSwitch(DATA_LOAD_FAIL); UIHelper.ToastMessage(NewsDetail.this, R.string.msg_load_is_null); } else if (msg.what == -1 && msg.obj != null) { headButtonSwitch(DATA_LOAD_FAIL); ((AppException) msg.obj).makeToast(NewsDetail.this); } } }; initData(newsId, false); } private void initData(final int news_id, final boolean isRefresh) { headButtonSwitch(DATA_LOAD_ING); new Thread() { public void run() { Message msg = new Message(); try { newsDetail = ((AppContext) getApplication()).getNews( news_id, isRefresh); msg.what = (newsDetail != null && newsDetail.getId() > 0) ? 1 : 0; msg.obj = (newsDetail != null) ? newsDetail.getNotice() : null;// 通知信息 } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } mHandler.sendMessage(msg); } }.start(); } /** * 底部栏切换 * * @param type */ private void viewSwitch(int type) { switch (type) { case VIEWSWITCH_TYPE_DETAIL: mDetail.setEnabled(false); mCommentList.setEnabled(true); mHeadTitle.setText(R.string.news_detail_head_title); mViewSwitcher.setDisplayedChild(0); break; case VIEWSWITCH_TYPE_COMMENTS: mDetail.setEnabled(true); mCommentList.setEnabled(false); mHeadTitle.setText(R.string.comment_list_head_title); mViewSwitcher.setDisplayedChild(1); break; } } /** * 头部按钮展示 * * @param type */ private void headButtonSwitch(int type) { switch (type) { case DATA_LOAD_ING: mScrollView.setVisibility(View.GONE); mProgressbar.setVisibility(View.VISIBLE); mRefresh.setVisibility(View.GONE); break; case DATA_LOAD_COMPLETE: mScrollView.setVisibility(View.VISIBLE); mProgressbar.setVisibility(View.GONE); mRefresh.setVisibility(View.VISIBLE); break; case DATA_LOAD_FAIL: mScrollView.setVisibility(View.GONE); mProgressbar.setVisibility(View.GONE); mRefresh.setVisibility(View.VISIBLE); break; } } private View.OnClickListener homeClickListener = new View.OnClickListener() { public void onClick(View v) { UIHelper.showHome(NewsDetail.this); } }; private View.OnClickListener refreshClickListener = new View.OnClickListener() { public void onClick(View v) { hideEditor(v); initData(newsId, true); loadLvCommentData(curId, curCatalog, 0, mCommentHandler, UIHelper.LISTVIEW_ACTION_REFRESH); } }; private View.OnClickListener authorClickListener = new View.OnClickListener() { public void onClick(View v) { UIHelper.showUserCenter(v.getContext(), newsDetail.getAuthorId(), newsDetail.getAuthor()); } }; private View.OnClickListener shareClickListener = new View.OnClickListener() { public void onClick(View v) { if (newsDetail == null) { UIHelper.ToastMessage(v.getContext(), R.string.msg_read_detail_fail); return; } // 分享到 UIHelper.showShareDialog(NewsDetail.this, newsDetail.getTitle(), newsDetail.getUrl()); } }; private View.OnClickListener detailClickListener = new View.OnClickListener() { public void onClick(View v) { if (newsId == 0) { return; } // 切换到详情 viewSwitch(VIEWSWITCH_TYPE_DETAIL); } }; private View.OnClickListener commentlistClickListener = new View.OnClickListener() { public void onClick(View v) { if (newsId == 0) { return; } // 切换到评论 viewSwitch(VIEWSWITCH_TYPE_COMMENTS); } }; private View.OnClickListener favoriteClickListener = new View.OnClickListener() { public void onClick(View v) { if (newsId == 0 || newsDetail == null) { return; } final AppContext ac = (AppContext) getApplication(); if (!ac.isLogin()) { UIHelper.showLoginDialog(NewsDetail.this); return; } final int uid = ac.getLoginUid(); final Handler handler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 1) { Result res = (Result) msg.obj; if (res.OK()) { if (newsDetail.getFavorite() == 1) { newsDetail.setFavorite(0); mFavorite .setImageResource(R.drawable.widget_bar_favorite); } else { newsDetail.setFavorite(1); mFavorite .setImageResource(R.drawable.widget_bar_favorite2); } // 重新保存缓存 ac.saveObject(newsDetail, newsDetail.getCacheKey()); } UIHelper.ToastMessage(NewsDetail.this, res.getErrorMessage()); } else { ((AppException) msg.obj).makeToast(NewsDetail.this); } } }; new Thread() { public void run() { Message msg = new Message(); Result res = null; try { if (newsDetail.getFavorite() == 1) { res = ac.delFavorite(uid, newsId, FavoriteList.TYPE_NEWS); } else { res = ac.addFavorite(uid, newsId, FavoriteList.TYPE_NEWS); } msg.what = 1; msg.obj = res; } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } handler.sendMessage(msg); } }.start(); } }; // 初始化视图控件 private void initCommentView() { lvComment_footer = getLayoutInflater().inflate( R.layout.listview_footer, null); lvComment_foot_more = (TextView) lvComment_footer .findViewById(R.id.listview_foot_more); lvComment_foot_progress = (ProgressBar) lvComment_footer .findViewById(R.id.listview_foot_progress); lvCommentAdapter = new ListViewCommentAdapter(this, lvCommentData, R.layout.comment_listitem); mLvComment = (PullToRefreshListView) findViewById(R.id.comment_list_listview); mLvComment.addFooterView(lvComment_footer);// 添加底部视图 必须在setAdapter前 mLvComment.setAdapter(lvCommentAdapter); mLvComment .setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 点击头部、底部栏无效 if (position == 0 || view == lvComment_footer) return; Comment com = null; // 判断是否是TextView if (view instanceof TextView) { com = (Comment) view.getTag(); } else { ImageView img = (ImageView) view .findViewById(R.id.comment_listitem_userface); com = (Comment) img.getTag(); } if (com == null) return; // 跳转--回复评论界面 UIHelper.showCommentReply(NewsDetail.this, curId, curCatalog, com.getId(), com.getAuthorId(), com.getAuthor(), com.getContent()); } }); mLvComment.setOnScrollListener(new AbsListView.OnScrollListener() { public void onScrollStateChanged(AbsListView view, int scrollState) { mLvComment.onScrollStateChanged(view, scrollState); // 数据为空--不用继续下面代码了 if (lvCommentData.size() == 0) return; // 判断是否滚动到底部 boolean scrollEnd = false; try { if (view.getPositionForView(lvComment_footer) == view .getLastVisiblePosition()) scrollEnd = true; } catch (Exception e) { scrollEnd = false; } if (scrollEnd && curLvDataState == UIHelper.LISTVIEW_DATA_MORE) { mLvComment.setTag(UIHelper.LISTVIEW_DATA_LOADING); lvComment_foot_more.setText(R.string.load_ing); lvComment_foot_progress.setVisibility(View.VISIBLE); // 当前pageIndex int pageIndex = lvSumData / 20; loadLvCommentData(curId, curCatalog, pageIndex, mCommentHandler, UIHelper.LISTVIEW_ACTION_SCROLL); } } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { mLvComment.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount); } }); mLvComment .setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { // 点击头部、底部栏无效 if (position == 0 || view == lvComment_footer) return false; Comment _com = null; // 判断是否是TextView if (view instanceof TextView) { _com = (Comment) view.getTag(); } else { ImageView img = (ImageView) view .findViewById(R.id.comment_listitem_userface); _com = (Comment) img.getTag(); } if (_com == null) return false; final Comment com = _com; curLvPosition = lvCommentData.indexOf(com); final AppContext ac = (AppContext) getApplication(); // 操作--回复 & 删除 int uid = ac.getLoginUid(); // 判断该评论是否是当前登录用户发表的:true--有删除操作 false--没有删除操作 if (uid == com.getAuthorId()) { final Handler handler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 1) { Result res = (Result) msg.obj; if (res.OK()) { lvSumData--; bv_comment.setText(lvSumData + ""); bv_comment.show(); lvCommentData.remove(com); lvCommentAdapter .notifyDataSetChanged(); } UIHelper.ToastMessage(NewsDetail.this, res.getErrorMessage()); } else { ((AppException) msg.obj) .makeToast(NewsDetail.this); } } }; final Thread thread = new Thread() { public void run() { Message msg = new Message(); try { Result res = ac.delComment(curId, curCatalog, com.getId(), com.getAuthorId()); msg.what = 1; msg.obj = res; } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } handler.sendMessage(msg); } }; UIHelper.showCommentOptionDialog(NewsDetail.this, curId, curCatalog, com, thread); } else { UIHelper.showCommentOptionDialog(NewsDetail.this, curId, curCatalog, com, null); } return true; } }); mLvComment .setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() { public void onRefresh() { loadLvCommentData(curId, curCatalog, 0, mCommentHandler, UIHelper.LISTVIEW_ACTION_REFRESH); } }); } // 初始化评论数据 private void initCommentData() { curId = newsId; curCatalog = CommentList.CATALOG_NEWS; mCommentHandler = new Handler() { public void handleMessage(Message msg) { if (msg.what >= 0) { CommentList list = (CommentList) msg.obj; Notice notice = list.getNotice(); // 处理listview数据 switch (msg.arg1) { case UIHelper.LISTVIEW_ACTION_INIT: case UIHelper.LISTVIEW_ACTION_REFRESH: lvSumData = msg.what; lvCommentData.clear();// 先清除原有数据 lvCommentData.addAll(list.getCommentlist()); break; case UIHelper.LISTVIEW_ACTION_SCROLL: lvSumData += msg.what; if (lvCommentData.size() > 0) { for (Comment com1 : list.getCommentlist()) { boolean b = false; for (Comment com2 : lvCommentData) { if (com1.getId() == com2.getId() && com1.getAuthorId() == com2 .getAuthorId()) { b = true; break; } } if (!b) lvCommentData.add(com1); } } else { lvCommentData.addAll(list.getCommentlist()); } break; } // 评论数更新 if (newsDetail != null && lvCommentData.size() > newsDetail .getCommentCount()) { newsDetail.setCommentCount(lvCommentData.size()); bv_comment.setText(lvCommentData.size() + ""); bv_comment.show(); } if (msg.what < 20) { curLvDataState = UIHelper.LISTVIEW_DATA_FULL; lvCommentAdapter.notifyDataSetChanged(); lvComment_foot_more.setText(R.string.load_full); } else if (msg.what == 20) { curLvDataState = UIHelper.LISTVIEW_DATA_MORE; lvCommentAdapter.notifyDataSetChanged(); lvComment_foot_more.setText(R.string.load_more); } // 发送通知广播 if (notice != null) { UIHelper.sendBroadCast(NewsDetail.this, notice); } } else if (msg.what == -1) { // 有异常--显示加载出错 & 弹出错误消息 curLvDataState = UIHelper.LISTVIEW_DATA_MORE; lvComment_foot_more.setText(R.string.load_error); ((AppException) msg.obj).makeToast(NewsDetail.this); } if (lvCommentData.size() == 0) { curLvDataState = UIHelper.LISTVIEW_DATA_EMPTY; lvComment_foot_more.setText(R.string.load_empty); } lvComment_foot_progress.setVisibility(View.GONE); if (msg.arg1 == UIHelper.LISTVIEW_ACTION_REFRESH) { mLvComment .onRefreshComplete(getString(R.string.pull_to_refresh_update) + new Date().toLocaleString()); mLvComment.setSelection(0); } } }; this.loadLvCommentData(curId, curCatalog, 0, mCommentHandler, UIHelper.LISTVIEW_ACTION_INIT); } /** * 线程加载评论数据 * * @param id * 当前文章id * @param catalog * 分类 * @param pageIndex * 当前页数 * @param handler * 处理器 * @param action * 动作标识 */ private void loadLvCommentData(final int id, final int catalog, final int pageIndex, final Handler handler, final int action) { new Thread() { public void run() { Message msg = new Message(); boolean isRefresh = false; if (action == UIHelper.LISTVIEW_ACTION_REFRESH || action == UIHelper.LISTVIEW_ACTION_SCROLL) isRefresh = true; try { CommentList commentlist = ((AppContext) getApplication()) .getCommentList(catalog, id, pageIndex, isRefresh); msg.what = commentlist.getPageSize(); msg.obj = commentlist; } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } msg.arg1 = action;// 告知handler当前action handler.sendMessage(msg); } }.start(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != RESULT_OK) return; if (data == null) return; viewSwitch(VIEWSWITCH_TYPE_COMMENTS);// 跳到评论列表 if (requestCode == UIHelper.REQUEST_CODE_FOR_RESULT) { Comment comm = (Comment) data .getSerializableExtra("COMMENT_SERIALIZABLE"); lvCommentData.add(0, comm); lvCommentAdapter.notifyDataSetChanged(); mLvComment.setSelection(0); // 显示评论数 int count = newsDetail.getCommentCount() + 1; newsDetail.setCommentCount(count); bv_comment.setText(count + ""); bv_comment.show(); } else if (requestCode == UIHelper.REQUEST_CODE_FOR_REPLY) { Comment comm = (Comment) data .getSerializableExtra("COMMENT_SERIALIZABLE"); lvCommentData.set(curLvPosition, comm); lvCommentAdapter.notifyDataSetChanged(); } } private View.OnClickListener commentpubClickListener = new View.OnClickListener() { public void onClick(View v) { _id = curId; if (curId == 0) { return; } _catalog = curCatalog; _content = mFootEditer.getText().toString(); if (StringUtils.isEmpty(_content)) { UIHelper.ToastMessage(v.getContext(), "请输入评论内容"); return; } final AppContext ac = (AppContext) getApplication(); if (!ac.isLogin()) { UIHelper.showLoginDialog(NewsDetail.this); return; } // if(mZone.isChecked()) // _isPostToMyZone = 1; _uid = ac.getLoginUid(); mProgress = ProgressDialog.show(v.getContext(), null, "发表中···", true, true); final Handler handler = new Handler() { public void handleMessage(Message msg) { if (mProgress != null) mProgress.dismiss(); if (msg.what == 1) { Result res = (Result) msg.obj; UIHelper.ToastMessage(NewsDetail.this, res.getErrorMessage()); if (res.OK()) { // 发送通知广播 if (res.getNotice() != null) { UIHelper.sendBroadCast(NewsDetail.this, res.getNotice()); } // 恢复初始底部栏 mFootViewSwitcher.setDisplayedChild(0); mFootEditer.clearFocus(); mFootEditer.setText(""); mFootEditer.setVisibility(View.GONE); // 跳到评论列表 viewSwitch(VIEWSWITCH_TYPE_COMMENTS); // 更新评论列表 lvCommentData.add(0, res.getComment()); lvCommentAdapter.notifyDataSetChanged(); mLvComment.setSelection(0); // 显示评论数 int count = newsDetail.getCommentCount() + 1; newsDetail.setCommentCount(count); bv_comment.setText(count + ""); bv_comment.show(); // 清除之前保存的编辑内容 ac.removeProperty(tempCommentKey); } } else { ((AppException) msg.obj).makeToast(NewsDetail.this); } } }; new Thread() { public void run() { Message msg = new Message(); Result res = new Result(); try { // 发表评论 res = ac.pubComment(_catalog, _id, _uid, _content, _isPostToMyZone); msg.what = 1; msg.obj = res; } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } handler.sendMessage(msg); } }.start(); } }; /** * 注册双击全屏事件 */ private void regOnDoubleEvent() { gd = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onDoubleTap(MotionEvent e) { isFullScreen = !isFullScreen; if (!isFullScreen) { WindowManager.LayoutParams params = getWindow() .getAttributes(); params.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().setAttributes(params); getWindow() .clearFlags( WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); mHeader.setVisibility(View.VISIBLE); mFooter.setVisibility(View.VISIBLE); } else { WindowManager.LayoutParams params = getWindow() .getAttributes(); params.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; getWindow().setAttributes(params); getWindow() .addFlags( WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); mHeader.setVisibility(View.GONE); mFooter.setVisibility(View.GONE); } return true; } }); } @Override public boolean dispatchTouchEvent(MotionEvent event) { if (isAllowFullScreen()) { gd.onTouchEvent(event); } return super.dispatchTouchEvent(event); } }