文章详情增加评论入口

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

@ -6,7 +6,7 @@ import android.content.SharedPreferences;
public class Config {
public static final String HOST = "http://api.ghzhushou.com/v2d1/";
public static final String HOST = "http://api.ghzhushou.com/v2d2/";
public static final String USER_HOST = "http://user.ghzhushou.com/v1d0/";
public static final String COMMENT_HOST = "http://comment.ghzhushou.com/v1d0/";
public static final String DATA_HOST = "http://data.ghzhushou.com/";

View File

@ -483,7 +483,6 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene
}
if (isNewFirstLaunch) {
getPluginUpdate();
initConcern(); // 初始化关注
// sp.edit().putBoolean("isNewFirstLaunchV" + PackageUtils.getVersion(getApplicationContext()), false).apply();
}
@ -505,6 +504,7 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene
public void run() {
// 注册设备
TokenUtils.register(MainActivity.this);
initConcern(); // 初始化关注
}
}.start();
}
@ -555,6 +555,11 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene
final ArrayList<GameEntity> concernDigest = new ArrayList<>();
final int size = arrGameId.size();
if (size == 0) {
EventBus.getDefault().post(new EBUISwitch("NewsFragment", -2)); // 没有关注
}
initConcernCount = 0;
for (String gameId : arrGameId) {
JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(
@ -639,6 +644,14 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene
private void getInstalledListFromServer() {
ArrayList<String> list = PackageUtils.getAllPackageName(getApplicationContext());
if (list.isEmpty()) {
if (isNewFirstLaunch) { // 延迟0.3s,防止页面未注册eventbus接收消息失败
handler.postDelayed(new Runnable() {
@Override
public void run() {
EventBus.getDefault().post(new EBUISwitch("NewsFragment", -1)); //通知更新推荐关注小版块
}
}, 300);
}
return;
}

View File

@ -2,6 +2,7 @@ package com.gh.gamecenter;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Rect;
import android.os.Build;
@ -14,13 +15,16 @@ import android.view.View;
import android.view.ViewTreeObserver;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.DiskBasedCache;
import com.facebook.drawee.view.SimpleDraweeView;
import com.gh.base.AppController;
import com.gh.base.BaseActivity;
import com.gh.common.constant.Config;
import com.gh.common.util.DialogUtils;
@ -33,19 +37,29 @@ import com.gh.gamecenter.adapter.MessageDetailAdapter;
import com.gh.gamecenter.db.CommentDao;
import com.gh.gamecenter.db.info.CommentInfo;
import com.gh.gamecenter.entity.CommentEntity;
import com.gh.gamecenter.entity.ConcernEntity;
import com.gh.gamecenter.entity.ViewsEntity;
import com.gh.gamecenter.manager.CommentManager;
import com.gh.gamecenter.retrofit.RetrofitManager;
import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.lang.reflect.Type;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.OnTouch;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;
/**
* Created by khy on 2016/11/8.
@ -60,9 +74,10 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
@BindView(R.id.comment_user_name) TextView mMessageDetailUserNameTv;
@BindView(R.id.comment_send) TextView mMessageDetailCommentSend;
@BindView(R.id.message_detail_comment_et) EditText mMessageDetailEt;
@BindView(R.id.message_detail_comment_hint) TextView mMessageDetailCommentHint;
@BindView(R.id.message_detail_comment_hint_rl) RelativeLayout mMessageDetailCommentHintRl;
@BindView(R.id.message_detail_sv) ScrollView mMessageDetailSv;
@BindView(R.id.message_detail_hint_line) View mMessageDetailLine;
@BindView(R.id.reuse_no_connection) LinearLayout mNoConnection;
private LinearLayoutManager mLayoutManager;
@ -74,10 +89,24 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
private CommentDao mCommentDao;
private ConcernEntity mConcernEntity;
private String newsId;
private int commentNum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mConcernEntity = (ConcernEntity) AppController.get("ConcernEntity", true);
if (mConcernEntity == null) {
Intent intent = getIntent();
newsId = intent.getExtras().getString("newsId");
commentNum = intent.getExtras().getInt("commentNum");
}
View contentView = View.inflate(this, R.layout.activity_messagedetail, null);
init(contentView, "消息详情");
@ -87,7 +116,7 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
mCommentDao = new CommentDao(this);
adapter = new MessageDetailAdapter(this, mCommentDao, mMessageDetailRv);
adapter = new MessageDetailAdapter(this, mCommentDao, mMessageDetailRv, mConcernEntity);
mLayoutManager = new LinearLayoutManager(this);
mMessageDetailRv.setLayoutManager(mLayoutManager);
mMessageDetailRv.setAdapter(adapter);
@ -99,11 +128,12 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_IDLE
&& !adapter.isOver() && !adapter.isLoading()
&& !adapter.isOver() && !adapter.isLoading() && mConcernEntity != null
&& mLayoutManager.findLastVisibleItemPosition() == adapter.getItemCount() - 1) {
adapter.addNormalComment(adapter.getItemCount() - adapter.getHotCommentListSize() - 3);
int offset = adapter.getItemCount() - adapter.getHotCommentListSize() - 3;
if (offset >= 10) { // 防止自动上滑时触发
adapter.addNormalComment(offset);
}
}
}
});
@ -117,8 +147,14 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
MessageDetailActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
mMessageDetailIconDv.setImageURI(sp.getString("user_icon", "res:///"+
R.drawable.user_default_icon_comment));
if (sp.getString("user_icon", "res:///"+
R.drawable.user_default_icon_comment).isEmpty()) {
mMessageDetailIconDv.setImageURI("res:///" +
R.drawable.user_default_icon_comment);
} else {
mMessageDetailIconDv.setImageURI(sp.getString("user_icon", "res:///"+
R.drawable.user_default_icon_comment));
}
mMessageDetailUserNameTv.setText(sp.getString("user_name", "光环用户"));
}
});
@ -126,8 +162,12 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
}).start();
} else {
mMessageDetailIconDv.setImageURI(sp.getString("user_icon", "res:///"+
R.drawable.user_default_icon_comment));
if (sp.getString("user_icon", "res:///"+ R.drawable.user_default_icon_comment).isEmpty()) {
mMessageDetailIconDv.setImageURI("res:///" + R.drawable.user_default_icon_comment);
} else {
mMessageDetailIconDv.setImageURI(sp.getString("user_icon", "res:///"+
R.drawable.user_default_icon_comment));
}
mMessageDetailUserNameTv.setText(sp.getString("user_name", "光环用户"));
}
@ -148,6 +188,52 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
});
}
if (newsId != null ) {
getConcernDigest();
}
}
private void getConcernDigest() {
JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(Config.HOST + "article/"+ newsId +"/rich-digest",
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Type listType = new TypeToken<ConcernEntity>() {}.getType();
Gson gson = new Gson();
mConcernEntity = gson.fromJson(response.toString(), listType);
adapter.addConcernEntity(mConcernEntity);
adapter.notifyDataSetChanged();
adapter.addHotComment(0);
getNewsViews();
if (commentNum == 0) {
setSoftInput(true);
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
showNoConnection(true);
}
});
AppController.addToRequestQueue(request);
}
private void getNewsViews() {
RetrofitManager.getData()
.getNewsViews(newsId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<List<ViewsEntity>>() {
@Override
public void call(List<ViewsEntity> viewsEntities) {
if (viewsEntities.size() >0) {
mConcernEntity.setViews(viewsEntities.get(0).getViews());
adapter.notifyItemChanged(0);
}
}
});
}
private TextWatcher watcher = new TextWatcher() {
@ -177,11 +263,16 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
};
@OnClick(R.id.message_detail_comment_hint)
@OnClick(R.id.message_detail_comment_hint_rl)
public void OnHintClikListener() {
setSoftInput(true);
}
@OnClick(R.id.reuse_no_connection)
public void OnConnectionClikListener() {
showNoConnection(false);
}
@OnTouch(R.id.message_detail_rv)
public boolean OnRecyclerTouchListener() {
if (mMessageDetailCommentRl.getVisibility() == View.VISIBLE) {
@ -208,7 +299,9 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
e.printStackTrace();
}
final String newsId = adapter.getNewsId();
if (newsId == null) {
newsId = mConcernEntity.getId();
}
PostCommentUtils.addCommentData(Config.COMMENT_HOST + "article/" + newsId + "/comment"
, jsonObject.toString(), MessageDetailActivity.this, new PostCommentUtils.PostCommentListener() {
@Override
@ -232,19 +325,26 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
cacheObject.put("user", cacheUser);
CommentEntity commentEntity = new Gson().fromJson(cacheObject.toString(), CommentEntity.class);
adapter.addNormalComment(commentEntity);
if (mConcernEntity != null) {
adapter.addNormalComment(commentEntity);
}
modifyNewsCommentVolleyCache(0, cacheObject, newsId);
} catch (JSONException e) {
e.printStackTrace();
}
adapter.notifyItemInserted(adapter.getHotCommentListSize() + 2);
if (mConcernEntity != null) {
// 完成评论操作,添加评论数
adapter.addCommentCount();
//修改评论缓存
CommentManager.updateOkhttpCache(newsId);
adapter.notifyItemInserted(adapter.getHotCommentListSize() + 2);
adapter.notifyItemChanged(adapter.getItemCount() - 1); //刷新脚布局高度
} else {
showNoConnection(false);
}
// 完成评论操作,添加评论数
adapter.addCommentCount();
//修改评论缓存
CommentManager.updateOkhttpCache(newsId);
}
@Override
@ -252,6 +352,7 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
mSendingDialog.dismiss();
if (error.networkResponse == null) {
Utils.toast(MessageDetailActivity.this, "提交失败,请检查网络设置");
Utils.log("评论错误返回为空======");
return;
}
@ -308,13 +409,30 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
}
}
private void showNoConnection(boolean isShow) {
if (isShow) {
mNoConnection.setVisibility(View.VISIBLE);
mMessageDetailRv.setVisibility(View.GONE);
} else {
mNoConnection.setVisibility(View.GONE);
mMessageDetailRv.setVisibility(View.VISIBLE);
if (newsId != null ) {
getConcernDigest();
}
if (mMessageDetailCommentRl.getVisibility() == View.VISIBLE) {
setSoftInput(false);
}
}
}
//软键盘控制
private void setSoftInput(boolean isShow) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if (isShow){
imm.showSoftInputFromInputMethod(mMessageDetailEt.getWindowToken(), 0);
imm.toggleSoftInputFromWindow(mMessageDetailEt.getWindowToken(), 0, InputMethodManager.HIDE_NOT_ALWAYS);
mMessageDetailCommentHint.setVisibility(View.GONE);
mMessageDetailCommentHintRl.setVisibility(View.GONE);
mMessageDetailLine.setVisibility(View.GONE);
mMessageDetailCommentRl.setVisibility(View.VISIBLE);
mMessageDetailUserRl.setVisibility(View.VISIBLE);
@ -324,7 +442,7 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
} else {
imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);
mMessageDetailCommentHint.setVisibility(View.VISIBLE);
mMessageDetailCommentHintRl.setVisibility(View.VISIBLE);
mMessageDetailLine.setVisibility(View.VISIBLE);
mMessageDetailCommentRl.setVisibility(View.GONE);
mMessageDetailUserRl.setVisibility(View.GONE);

View File

@ -270,7 +270,7 @@ public class NewsDetailActivity extends DetailActivity implements OnClickListene
public void onClick(final View v) {
super.onClick(v);
if (v == iv_share) {
if (adapter != null) {
if (adapter != null && adapter.getNewsDetailEntity() != null) {
Map<String, Object> kv = new HashMap<>();
kv.put("名字", adapter.getNewsDetailEntity().getTitle());
kv.put("位置", "分享");

View File

@ -11,16 +11,33 @@ import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.gh.base.BaseActivity;
import com.gh.gamecenter.entity.CommentnumEntity;
import com.gh.gamecenter.retrofit.RetrofitManager;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
* Created by khy on 2016/10/18.
*/
public class WebActivity extends BaseActivity {
private WebView news_webview;
private ProgressBar web_progressbar;
@BindView(R.id.news_webview) WebView webView;
@BindView(R.id.web_progressbar) ProgressBar progressBar;
@BindView(R.id.web_comment) TextView webComment;
@BindView(R.id.news_bottom) RelativeLayout newsBottom;
private String newsId;
private int commentNum;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -28,19 +45,21 @@ public class WebActivity extends BaseActivity {
String webUrl = getIntent().getStringExtra("url");
String webTitle = getIntent().getStringExtra("gameName");
newsId = getIntent().getStringExtra("newsId");
View contentView = View.inflate(this, R.layout.activity_web, null);
init(contentView, webTitle);
news_webview.loadUrl(webUrl);
ButterKnife.bind(this);
WebSettings settings = news_webview.getSettings();
webView.loadUrl(webUrl);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
//用webview打开url
news_webview.setWebViewClient(new WebViewClient(){
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
@ -58,7 +77,7 @@ public class WebActivity extends BaseActivity {
});
// 页面里的下载跳转到自带浏览器
news_webview.setDownloadListener(new DownloadListener() {
webView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
Uri uri = Uri.parse(url);
@ -68,26 +87,56 @@ public class WebActivity extends BaseActivity {
});
//设置加载进度条
news_webview.setWebChromeClient(new WebChromeClient(){
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
web_progressbar.setProgress(newProgress);
progressBar.setProgress(newProgress);
if (newProgress == 100){
web_progressbar.setVisibility(View.GONE);
progressBar.setVisibility(View.GONE);
if (newsBottom.getVisibility() == View.GONE) {
newsBottom.setVisibility(View.VISIBLE);
}
} else {
if (web_progressbar.getVisibility() == View.GONE) {
web_progressbar.setVisibility(View.VISIBLE);
if (progressBar.getVisibility() == View.GONE) {
progressBar.setVisibility(View.VISIBLE);
}
}
}
});
getNewsCommentNum();
}
@OnClick(R.id.web_comment)
public void OnCommentClickListener() {
Intent intent = new Intent(this, MessageDetailActivity.class);
intent.putExtra("newsId", newsId);
intent.putExtra("commentNum", commentNum);
startActivity(intent);
}
public void getNewsCommentNum() {
RetrofitManager.getComment()
.getNewsCommentnum(newsId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new com.gh.gamecenter.retrofit.Response<List<CommentnumEntity>>(){
@Override
public void onNext(List<CommentnumEntity> response) {
super.onNext(response);
if (response.size() > 0 && response.get(0).getNum() > 0) {
commentNum = response.get(0).getNum();
webComment.setText("查看评论(" + response.get(0).getNum() + ")");
}
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && news_webview.canGoBack()) {
news_webview.goBack();// 返回前一个页面
if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
webView.goBack();// 返回前一个页面
return true;
}
return super.onKeyDown(keyCode, event);

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;
}

View File

@ -507,7 +507,13 @@ public class GameUpdateFragmentAdapter extends RecyclerView.Adapter<RecyclerView
}
if (packageName != null) {
viewHolder.gu_item_btv_update.performClick();
// 插件跳转游戏更新页面造成闪退,可能是页面未绘制完成点击造成的闪退
viewHolder.gu_item_btv_update.post(new Runnable() {
@Override
public void run() {
viewHolder.gu_item_btv_update.performClick();
}
});
packageName = null;
}
}

View File

@ -75,6 +75,8 @@ public class News1Fragment extends BaseFragment implements SwipeRefreshLayout.On
private SharedPreferences sp;
private boolean isNewFirstLaunch;
private boolean isInitConcernOcer;
private boolean isInitInstallOver;
Runnable runnable = new Runnable() {
@Override
@ -208,13 +210,21 @@ public class News1Fragment extends BaseFragment implements SwipeRefreshLayout.On
if (loadingLayout.getVisibility() == View.VISIBLE && !isNewFirstLaunch) {
adapter.addList(0);
}
} else if (swith.getPosition() == -1) { // 初始化安装游戏完成 默认开启推荐版块!有关注新闻再隐藏
refreshLayout.setRefreshing(false);
loadingLayout.setVisibility(View.GONE);
recyclerView.setVisibility(View.GONE);
emptyLayout.setVisibility(View.VISIBLE);
refreshLayout.setEnabled(false);
initInstallGame();
} else if (swith.getPosition() == -2 || swith.getPosition() == -1) {
if (swith.getPosition() == -1) {
isInitInstallOver = true;
} else if (swith.getPosition() == -2) {
isInitConcernOcer = true;
}
if (isInitConcernOcer && isInitInstallOver) { // 没有关注且初始化安装完成,显示推荐小版块
refreshLayout.setRefreshing(false);
loadingLayout.setVisibility(View.GONE);
recyclerView.setVisibility(View.GONE);
emptyLayout.setVisibility(View.VISIBLE);
refreshLayout.setEnabled(false);
initInstallGame();
}
}
}
}

View File

@ -598,6 +598,7 @@ public class News1FragmentAdapter extends RecyclerView.Adapter<RecyclerView.View
Intent intent = new Intent(context, WebActivity.class);
intent.putExtra("url", concernEntity.getLink());
intent.putExtra("gameName", concernEntity.getGameName());
intent.putExtra("newsId", concernEntity.getId());
context.startActivity(intent);
}else {
Intent intent = new Intent(context, NewsDetailActivity.class);

View File

@ -31,10 +31,12 @@ import com.gh.common.util.NewsUtils;
import com.gh.common.util.RandomUtils;
import com.gh.common.util.TokenUtils;
import com.gh.common.util.Utils;
import com.gh.gamecenter.MessageDetailActivity;
import com.gh.gamecenter.NewsDetailActivity;
import com.gh.gamecenter.R;
import com.gh.gamecenter.ViewImageActivity;
import com.gh.gamecenter.entity.ApkEntity;
import com.gh.gamecenter.entity.CommentnumEntity;
import com.gh.gamecenter.entity.GameEntity;
import com.gh.gamecenter.entity.NewsDetailEntity;
import com.gh.gamecenter.entity.NewsEntity;
@ -42,6 +44,7 @@ import com.gh.gamecenter.gamedetail.GameDetailTopViewHolder;
import com.gh.gamecenter.listener.OnCallBackListener;
import com.gh.gamecenter.manager.ConcernManager;
import com.gh.gamecenter.manager.DataCollectionManager;
import com.gh.gamecenter.retrofit.RetrofitManager;
import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest;
import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest;
import com.google.gson.Gson;
@ -56,6 +59,9 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
* Created by LGT on 2016/9/13.
*/
@ -74,6 +80,7 @@ public class NewsDetailAdapter extends RecyclerView.Adapter {
private String type;
private String title;
private String entrance;
private int commentNum;
public NewsDetailAdapter(NewsDetailActivity activity, String entrance) {
this.context = activity;
@ -83,6 +90,24 @@ public class NewsDetailAdapter extends RecyclerView.Adapter {
concernManager = new ConcernManager(context);
}
public void getNewsCommentNum() {
RetrofitManager.getComment()
.getNewsCommentnum(id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new com.gh.gamecenter.retrofit.Response<List<CommentnumEntity>>(){
@Override
public void onNext(List<CommentnumEntity> response) {
super.onNext(response);
if (response.size() > 0) {
commentNum = response.get(0).getNum();
notifyItemChanged(getItemCount() - 1);
}
}
});
}
public void getNewsDetail() {
JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(
Config.HOST + "news/" + id + "/detail",
@ -120,7 +145,8 @@ public class NewsDetailAdapter extends RecyclerView.Adapter {
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Type listType = new TypeToken<ArrayList<NewsEntity>>() {}.getType();
Type listType = new TypeToken<ArrayList<NewsEntity>>() {
}.getType();
Gson gson = new Gson();
List<NewsEntity> list = gson.fromJson(response.toString(), listType);
// 去除与当前文章重复的文章
@ -140,8 +166,16 @@ public class NewsDetailAdapter extends RecyclerView.Adapter {
newsDetailEntity.setMore(more);
notifyItemInserted(getItemCount() - 1);
}
getNewsCommentNum();
}
}, null);
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
getNewsCommentNum();
}
});
AppController.addToRequestQueue(request, NewsDetailActivity.TAG);
}
@ -154,6 +188,9 @@ public class NewsDetailAdapter extends RecyclerView.Adapter {
if (gameEntity != null) {
count++;
}
if (gameEntity != null && gameEntity.getId() != null && !gameEntity.getId().isEmpty()){
count++;
}
if (newsDetailEntity.getMore() != null && newsDetailEntity.getMore().size() != 0) {
count++;
}
@ -162,6 +199,10 @@ public class NewsDetailAdapter extends RecyclerView.Adapter {
@Override
public int getItemViewType(int position) {
if (position == getItemCount() -1 && gameEntity != null && gameEntity.getId() != null
&& !gameEntity.getId().isEmpty()) {
return 100;
}
if (gameEntity != null && position == 1) {
return 1;
} else if (gameEntity == null && position == 1) {
@ -184,6 +225,10 @@ public class NewsDetailAdapter extends RecyclerView.Adapter {
View view = LayoutInflater.from(parent.getContext()).inflate(
R.layout.newsdetail_item_news_more, parent, false);
return new NewsDetailNewsMoreViewHolder(view);
} else if (viewType == 100){
View view = LayoutInflater.from(parent.getContext()).inflate(
R.layout.newsdetail_item_comment, parent, false);
return new NewsDetailCommentViewHolder(view);
}
return null;
}
@ -196,9 +241,27 @@ public class NewsDetailAdapter extends RecyclerView.Adapter {
initGameDetailTopViewHolder((GameDetailTopViewHolder) holder);
} else if (holder instanceof NewsDetailNewsMoreViewHolder) {
initNewsDetailNewsMoreViewHolder((NewsDetailNewsMoreViewHolder) holder);
} else if (holder instanceof NewsDetailCommentViewHolder) {
initNewsDetailNewsCommentViewHolder((NewsDetailCommentViewHolder) holder);
}
}
private void initNewsDetailNewsCommentViewHolder(NewsDetailCommentViewHolder holder) {
if (commentNum > 0) {
holder.commentTv.setText("查看评论(" + commentNum + ")");
}
holder.commentTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, MessageDetailActivity.class);
intent.putExtra("newsId", id);
intent.putExtra("commentNum", commentNum);
context.startActivity(intent);
}
});
}
private void initNewsDetailNewsMoreViewHolder(final NewsDetailNewsMoreViewHolder viewHolder) {
if (viewHolder.newsdetail_item_ll_news_more.getTag() == null) {
for (int i = 0; i < newsDetailEntity.getMore().size(); i++) {

View File

@ -0,0 +1,23 @@
package com.gh.gamecenter.newsdetail;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
import com.gh.gamecenter.R;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by khy on 2016/11/28.
*/
public class NewsDetailCommentViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.newsdetail_item_comment) public TextView commentTv;
public NewsDetailCommentViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}