处理一部分activity的toolbar,已经处理完毕的标记为Deprecated,为了保持MTA数据上报兼容性,暂时未删除对应的Activity
This commit is contained in:
@ -3,317 +3,29 @@ package com.gh.gamecenter;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.Html;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.common.util.DataCollectionUtils;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.util.NewsUtils;
|
||||
import com.gh.common.view.VerticalItemDecoration;
|
||||
import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
|
||||
import com.gh.gamecenter.adapter.viewholder.NewsTextViewHolder;
|
||||
import com.gh.gamecenter.entity.NewsEntity;
|
||||
import com.gh.gamecenter.retrofit.Response;
|
||||
import com.gh.gamecenter.retrofit.RetrofitManager;
|
||||
import com.lightgame.utils.Utils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import butterknife.BindView;
|
||||
import retrofit2.HttpException;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.functions.Func1;
|
||||
import rx.schedulers.Schedulers;
|
||||
import com.halo.assistant.fragment.game.GameNewsSearchResultFragment;
|
||||
import com.halo.assistant.ui.IntentFactory;
|
||||
|
||||
/**
|
||||
* Created by khy on 2016/8/22.
|
||||
* 新闻搜索界面
|
||||
*/
|
||||
public class NewsSearchActivity extends BaseActivity {
|
||||
|
||||
@BindView(R.id.gamedetail_news_rv)
|
||||
RecyclerView mNewsSearchRv;
|
||||
@BindView(R.id.tv_search)
|
||||
TextView mNewsSearchTv;
|
||||
@BindView(R.id.reuse_none_data)
|
||||
LinearLayout mNoneData;
|
||||
@BindView(R.id.et_search)
|
||||
EditText mNewsSearchEt;
|
||||
@BindView(R.id.gamedetail_news_ll_loading)
|
||||
LinearLayout mLoading;
|
||||
@BindView(R.id.reuse_no_connection)
|
||||
LinearLayout mNoConn;
|
||||
|
||||
private LinearLayoutManager layoutManager;
|
||||
private List<NewsEntity> newsEntities;
|
||||
private NewsSearchAdapter searchAdapter;
|
||||
|
||||
private boolean isLoadOver = true;
|
||||
private boolean isRemove = false;
|
||||
private boolean isNetworkError = false;
|
||||
|
||||
private String searchKey;
|
||||
private String gameId;
|
||||
|
||||
private Handler handler = new Handler();
|
||||
|
||||
private int page = 1;
|
||||
@Deprecated
|
||||
public class NewsSearchActivity extends CommonActivity {
|
||||
|
||||
@NonNull
|
||||
public static Intent getIntent(Context context, String gameName, String searchKey, String gameId, String entrance) {
|
||||
Intent intent = new Intent(context, NewsSearchActivity.class);
|
||||
intent.putExtra(EntranceUtils.KEY_GAMENAME, gameName);
|
||||
intent.putExtra(EntranceUtils.KEY_SEARCHKEY, searchKey);
|
||||
intent.putExtra(EntranceUtils.KEY_GAMEID, gameId);
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
return intent;
|
||||
Bundle args = new Bundle();
|
||||
args.putString(EntranceUtils.KEY_GAMENAME, gameName);
|
||||
args.putString(EntranceUtils.KEY_SEARCHKEY, searchKey);
|
||||
args.putString(EntranceUtils.KEY_GAMEID, gameId);
|
||||
args.putString(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
return new IntentFactory.Builder(context)
|
||||
.setActivity(NewsSearchActivity.class)
|
||||
.setFragment(GameNewsSearchResultFragment.class).setArgs(args).build();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_gamedetail_news;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
Intent intent = getIntent();
|
||||
String gameName = intent.getExtras().getString(EntranceUtils.KEY_GAMENAME);
|
||||
searchKey = intent.getExtras().getString(EntranceUtils.KEY_SEARCHKEY);
|
||||
gameId = intent.getExtras().getString(EntranceUtils.KEY_GAMEID);
|
||||
|
||||
setNavigationTitle(gameName);
|
||||
|
||||
DisplayMetrics outMetrics = new DisplayMetrics();
|
||||
getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
|
||||
|
||||
newsEntities = new ArrayList<>();
|
||||
searchAdapter = new NewsSearchAdapter();
|
||||
|
||||
layoutManager = new LinearLayoutManager(this);
|
||||
|
||||
mNewsSearchRv.setLayoutManager(layoutManager);
|
||||
mNewsSearchRv.setAdapter(searchAdapter);
|
||||
mNewsSearchRv.addItemDecoration(new VerticalItemDecoration(NewsSearchActivity.this, 1, false));
|
||||
|
||||
mNewsSearchEt.setText(searchKey);
|
||||
|
||||
loadNewsData(page);
|
||||
|
||||
mNewsSearchTv.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
searchKey = mNewsSearchEt.getText().toString().trim();
|
||||
if (searchKey.length() >= 1) {
|
||||
newsEntities.clear();
|
||||
searchAdapter.notifyDataSetChanged();
|
||||
mLoading.setVisibility(View.VISIBLE);
|
||||
mNoneData.setVisibility(View.GONE);
|
||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
|
||||
handler.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
page = 1;
|
||||
loadNewsData(page);
|
||||
}
|
||||
}, 500);
|
||||
|
||||
} else {
|
||||
Utils.toast(NewsSearchActivity.this, getString(R.string.search_hint));
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
mNewsSearchRv.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
@Override
|
||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||
super.onScrollStateChanged(recyclerView, newState);
|
||||
if (newState == RecyclerView.SCROLL_STATE_IDLE && layoutManager.findLastVisibleItemPosition() + 1 == searchAdapter.getItemCount()
|
||||
&& isLoadOver && !isRemove && !isNetworkError) {
|
||||
isLoadOver = false;
|
||||
page++;
|
||||
loadNewsData(page);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
mNoConn.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mNoConn.setVisibility(View.GONE);
|
||||
mLoading.setVisibility(View.VISIBLE);
|
||||
handler.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
loadNewsData(1);
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
handler.removeCallbacksAndMessages(null);
|
||||
}
|
||||
|
||||
private void loadNewsData(final int page) {
|
||||
// DataUtils.onEvent(this, "游戏新闻搜索", searchKey);
|
||||
// DataCollectionUtils.uploadSearch(this, searchKey, "游戏新闻搜索");
|
||||
|
||||
RetrofitManager.getInstance(this).getApi().getSearchNews(gameId, searchKey, page, 20)
|
||||
.map(new Func1<List<NewsEntity>, List<NewsEntity>>() {
|
||||
@Override
|
||||
public List<NewsEntity> call(List<NewsEntity> list) {
|
||||
// 去掉重复数据
|
||||
return NewsUtils.removeDuplicateData(newsEntities, list);
|
||||
}
|
||||
})
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<List<NewsEntity>>() {
|
||||
@Override
|
||||
public void onResponse(List<NewsEntity> response) {
|
||||
isLoadOver = true;
|
||||
mLoading.setVisibility(View.GONE);
|
||||
mNoneData.setVisibility(View.GONE);
|
||||
|
||||
if (response.size() != 0) {
|
||||
newsEntities.addAll(response);
|
||||
searchAdapter.notifyDataSetChanged();
|
||||
} else {
|
||||
if (page == 1) {
|
||||
mNoneData.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
isRemove = true;
|
||||
searchAdapter.notifyItemChanged(searchAdapter.getItemCount() - 1);
|
||||
}
|
||||
|
||||
if (response.size() < 20) {
|
||||
isRemove = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(HttpException e) {
|
||||
if (page == 1) {
|
||||
mNoConn.setVisibility(View.VISIBLE);
|
||||
mLoading.setVisibility(View.GONE);
|
||||
}
|
||||
isLoadOver = true;
|
||||
toast(R.string.loading_failed_hint);
|
||||
isNetworkError = true;
|
||||
searchAdapter.notifyItemChanged(searchAdapter.getItemCount() - 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public class NewsSearchAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
if (viewType == 0) {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(
|
||||
R.layout.refresh_footerview, parent, false);
|
||||
return new FooterViewHolder(view);
|
||||
} else {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(
|
||||
R.layout.news_text_item, parent, false);
|
||||
return new NewsTextViewHolder(view);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
|
||||
if (holder instanceof NewsTextViewHolder) {
|
||||
NewsTextViewHolder viewHolder = (NewsTextViewHolder) holder;
|
||||
viewHolder.title.setText(Html.fromHtml(newsEntities.get(position).getTitle()));
|
||||
viewHolder.type.setVisibility(View.GONE);
|
||||
viewHolder.line.setVisibility(View.GONE);
|
||||
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
NewsEntity newsEntity = newsEntities.get(holder.getPosition());
|
||||
|
||||
Map<String, Object> kv = new HashMap<>();
|
||||
kv.put("名字", newsEntity.getTitle());
|
||||
kv.put("位置", String.valueOf(holder.getPosition() + 1));
|
||||
DataUtils.onEvent(NewsSearchActivity.this, "点击", "游戏新闻搜索", kv);
|
||||
|
||||
DataCollectionUtils.uploadClick(NewsSearchActivity.this,
|
||||
"列表", "游戏新闻搜索", newsEntity.getTitle());
|
||||
|
||||
// 统计阅读量
|
||||
NewsUtils.statNewsViews(NewsSearchActivity.this, newsEntity.getId());
|
||||
NewsDetailActivity.startNewsDetailActivity(NewsSearchActivity.this, newsEntity,
|
||||
mEntrance + "+(游戏新闻搜索[" + searchKey + "])");
|
||||
}
|
||||
});
|
||||
} else if (holder instanceof FooterViewHolder) {
|
||||
FooterViewHolder viewHolder = (FooterViewHolder) holder;
|
||||
viewHolder.itemView.setPadding(0, 0, 0, 0);
|
||||
if (isNetworkError) {
|
||||
viewHolder.loading.setVisibility(View.GONE);
|
||||
viewHolder.hint.setText(R.string.loading_failed_retry);
|
||||
viewHolder.itemView.setClickable(true);
|
||||
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
isNetworkError = false;
|
||||
notifyItemChanged(getItemCount() - 1);
|
||||
loadNewsData(page);
|
||||
}
|
||||
});
|
||||
} else if (isRemove) {
|
||||
viewHolder.loading.setVisibility(View.GONE);
|
||||
viewHolder.hint.setText(R.string.loading_complete);
|
||||
viewHolder.itemView.setClickable(false);
|
||||
} else {
|
||||
viewHolder.loading.setVisibility(View.VISIBLE);
|
||||
viewHolder.hint.setText(R.string.loading);
|
||||
viewHolder.itemView.setClickable(false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
if (position == newsEntities.size()) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (newsEntities.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
return newsEntities.size() + 1;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user