文章详情增加评论入口

This commit is contained in:
khy
2016-11-30 10:29:35 +08:00
parent 82cf8cb877
commit 68f8bee146
17 changed files with 487 additions and 96 deletions

View File

@ -101,7 +101,8 @@ public class MessageDetailAdapter extends RecyclerView.Adapter<RecyclerView.View
private static final int ITEM_COMMENT = 102;
private static final int ITEM_FOOTER = 103;
public MessageDetailAdapter(MessageDetailActivity context, CommentDao commentDao, RecyclerView messageDetailRv) {
public MessageDetailAdapter(MessageDetailActivity context, CommentDao commentDao, RecyclerView messageDetailRv ,
ConcernEntity concernEntity) {
this.mContext = context;
this.mRecyclerView = messageDetailRv;
@ -123,17 +124,18 @@ public class MessageDetailAdapter extends RecyclerView.Adapter<RecyclerView.View
mHotCommentList = new ArrayList<>();
mNormalCommentList = new ArrayList<>();
mConcernEntity = (ConcernEntity) AppController.get("ConcernEntity", true);
mConcernEntity = concernEntity;
if (mConcernEntity.getCommentnum() != 0) {
if (mConcernEntity != null && mConcernEntity.getCommentnum() != 0) {
addHotComment(0);
} else {
notifyItemChanged(1);
} else if (mConcernEntity != null) {
isOver = true;
notifyItemChanged(getItemCount() - 1);
mCallBackListener.showSoftInput();
}
}
private void addHotComment(int offset) {
public void addHotComment(int offset) {
String hotCommentUrl = Config.COMMENT_HOST + "article/" + mConcernEntity.getId() +
"/comment?order=hot&limit=" + 10 + "&offset=" + offset;
@ -246,16 +248,6 @@ public class MessageDetailAdapter extends RecyclerView.Adapter<RecyclerView.View
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (isRefreshPosition) {
Timer timer = new Timer(); // 延迟半秒,防止出现闪屏现象
timer.schedule(new TimerTask() {
@Override
public void run() {
mRecyclerView.smoothScrollBy(0, mConcernEntity.getItemHeight()); //定位到评论顶部
}
}, 500);
isRefreshPosition = false;
}
if (holder instanceof NewsDigestViewHolder) {
initNewsDigestViewHolder((NewsDigestViewHolder) holder);
} else if (holder instanceof CommentViewHolder) {
@ -287,36 +279,43 @@ public class MessageDetailAdapter extends RecyclerView.Adapter<RecyclerView.View
return itemCount + 1;
}
boolean isGetRvHeight = true; // 防止评论时弹出软键盘 影响RecyclerView高度
int rvHeight;
private void initFooterViewHolder(final FooterViewHolder viewHolder) {
if (isGetRvHeight) {
rvHeight = mRecyclerView.getHeight();
isGetRvHeight = false;
}
LinearLayout.LayoutParams params;
int height = 0;
if (mRecyclerView.getChildCount() != 1 ) {
for (int i = 0; i < mRecyclerView.getChildCount(); i++) {
if ( i != 0 ){
if ( i != 0 || mRecyclerView.getChildAt(0).getHeight() < 200){
height = height + mRecyclerView.getChildAt(i).getHeight();
}
}
}
if (mRecyclerView.getHeight() - height < 100) {
if (rvHeight - height < 100 || (mNormalCommentList.size() + mHotCommentList.size()) * 220 > rvHeight) {
params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
((LinearLayout)viewHolder.itemView).setGravity(Gravity.CENTER);
} else {
params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, mRecyclerView.getHeight() - height);
params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,rvHeight - height);
((LinearLayout)viewHolder.itemView).setGravity(Gravity.CENTER_HORIZONTAL);
}
viewHolder.itemView.setLayoutParams(params);
((LinearLayout)viewHolder.itemView).setGravity(Gravity.CENTER_HORIZONTAL);
if (!isOver) {
if(isNetworkError) {
viewHolder.loading.setVisibility(View.GONE);
viewHolder.hint.setText("网络错误,点击重试!");
}else if (!isOver) {
viewHolder.hint.setText("加载中...");
viewHolder.loading.setVisibility(View.VISIBLE);
} else if (isNetworkError || mNormalCommentList.size() == 0 && mHotCommentList.size() == 0) {
} else if ( mNormalCommentList.size() == 0 && mHotCommentList.size() == 0) {
viewHolder.loading.setVisibility(View.GONE);
if (isNetworkError) {
viewHolder.hint.setText("网络错误,点击重试!");
} else {
viewHolder.itemView.setLayoutParams(params);
viewHolder.itemView.setPadding(0, DisplayUtils.dip2px(mContext, 20), 0, 0);
viewHolder.hint.setText("目前还没有评论");
}
viewHolder.itemView.setLayoutParams(params);
viewHolder.itemView.setPadding(0, DisplayUtils.dip2px(mContext, 30), 0, 0);
viewHolder.hint.setText("目前还没有评论");
} else {
if (mNormalCommentList.size() > 10) {
viewHolder.hint.setText("没有更多评论啦");
@ -339,7 +338,7 @@ public class MessageDetailAdapter extends RecyclerView.Adapter<RecyclerView.View
});
}
private void initNewsDigestViewHolder(NewsDigestViewHolder viewHolder) {
private void initNewsDigestViewHolder(final NewsDigestViewHolder viewHolder) {
((CardLinearLayout) viewHolder.itemView).setmTop(DisplayUtils.dip2px(mContext, 8));
((CardLinearLayout) viewHolder.itemView).setmBottom(DisplayUtils.dip2px(mContext, 4));
@ -433,6 +432,7 @@ public class MessageDetailAdapter extends RecyclerView.Adapter<RecyclerView.View
Intent intent = new Intent(mContext, WebActivity.class);
intent.putExtra("url", mConcernEntity.getLink());
intent.putExtra("gameName", mConcernEntity.getGameName());
intent.putExtra("newsId", mConcernEntity.getId());
mContext.startActivity(intent);
} else {
Intent intent = new Intent(mContext, NewsDetailActivity.class);
@ -449,6 +449,22 @@ public class MessageDetailAdapter extends RecyclerView.Adapter<RecyclerView.View
mCallBackListener.showSoftInput();
}
});
viewHolder.itemView.post(new Runnable() {
@Override
public void run() {
if (isRefreshPosition) {
Timer timer = new Timer(); // 延迟半秒,防止出现闪屏现象
timer.schedule(new TimerTask() {
@Override
public void run() {
mRecyclerView.smoothScrollBy(0, viewHolder.itemView.getHeight()); //定位到评论顶部
}
}, 300);
isRefreshPosition = false;
}
}
});
}
private void initCommentViewHolder(final CommentViewHolder holder, int position) {
@ -641,10 +657,6 @@ public class MessageDetailAdapter extends RecyclerView.Adapter<RecyclerView.View
}
}
public String getNewsId() {
return mConcernEntity.getId();
}
public boolean isLoading() {
return isLoading;
}
@ -667,6 +679,10 @@ public class MessageDetailAdapter extends RecyclerView.Adapter<RecyclerView.View
return index;
}
public void addConcernEntity(ConcernEntity concernEntity) {
this.mConcernEntity = concernEntity;
}
public boolean isOver() {
return isOver;
}