package com.gh.gamecenter; import android.os.Bundle; import android.support.v4.util.ArrayMap; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.gh.base.BaseActivity; import com.gh.common.util.DisplayUtils; import com.gh.gamecenter.adapter.GameNewsAdapter; import com.gh.gamecenter.adapter.GameNewsTypeListAdapter; import com.gh.gamecenter.eventbus.EBTypeChange; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import retrofit2.adapter.rxjava.HttpException; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; /** * Created by LGT on 2016/8/29. * 游戏新闻界面 */ public class GameNewsActivity extends BaseActivity implements View.OnClickListener { @BindView(R.id.game_news_list) RecyclerView game_news_list; @BindView(R.id.game_news_top_type_list) RecyclerView game_news_top_type_list; @BindView(R.id.reuse_none_data) LinearLayout mNoDataLl; @BindView(R.id.reuse_tv_none_data) TextView mNoDataTv; private GameNewsAdapter adapter; private GameNewsTypeListAdapter typeListAdapter; private LinearLayoutManager layoutManager; private ImageView ivSearch; private ArrayMap adapterMap; private List typeList; private String gameId; private String entrance; private float startY = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); entrance = getIntent().getStringExtra("entrance"); View contentView = View.inflate(this, R.layout.activity_game_news, null); ivSearch = new ImageView(this); ivSearch.setImageResource(R.drawable.ic_search_white); RelativeLayout.LayoutParams ivSearchParams = new RelativeLayout.LayoutParams( DisplayUtils.dip2px(this, 20), DisplayUtils.dip2px(this, 20)); ivSearchParams.addRule(RelativeLayout.CENTER_VERTICAL); ivSearchParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); ivSearchParams.setMargins(0, 0, DisplayUtils.dip2px(this, 10), 0); RelativeLayout reuse_actionbar = (RelativeLayout) contentView.findViewById(R.id.reuse_actionbar); reuse_actionbar.addView(ivSearch, ivSearchParams); ivSearch.setOnClickListener(this); ivSearch.setVisibility(View.GONE); String gameName = getIntent().getStringExtra("gameName"); init(contentView, gameName); mNoDataTv.setText("暂无内容"); adapterMap = new ArrayMap<>(); typeList = new ArrayList<>(); gameId = getIntent().getStringExtra("gameId"); game_news_list.setHasFixedSize(true); layoutManager = new LinearLayoutManager(this); game_news_list.setLayoutManager(layoutManager); game_news_list.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); if (layoutManager.findFirstVisibleItemPosition() >= 1) { game_news_top_type_list.setVisibility(View.VISIBLE); ivSearch.setVisibility(View.VISIBLE); } else { game_news_top_type_list.setVisibility(View.GONE); ivSearch.setVisibility(View.GONE); } } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (adapter != null && newState == RecyclerView.SCROLL_STATE_IDLE && layoutManager.findLastVisibleItemPosition() == adapter.getItemCount() - 1) { if (!adapter.isRemove() && !adapter.isLoading() && !adapter.isNetworkError()) { adapter.addList(adapter.getNewsList().size()); } } } }); game_news_top_type_list.setHasFixedSize(true); game_news_top_type_list.setLayoutManager(new GridLayoutManager(this, 5)); //禁止由于滑动出现的阴影 game_news_top_type_list.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { startY = event.getY(); } else if (event.getAction() == MotionEvent.ACTION_MOVE) { if (Math.abs(startY - event.getY()) > 0) { return true; } } return false; } }); if (!TextUtils.isEmpty(gameId)) { getGameArticleType(); } } private void getGameArticleType() { RetrofitManager.getApi() .getGameArticleType(gameId) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response>() { @Override public void onResponse(List response) { super.onResponse(response); typeList = response; typeList.add(0, "全部"); adapter = new GameNewsAdapter(GameNewsActivity.this, typeList, game_news_list, gameId, "全部", entrance, mNoDataLl); adapterMap.put("全部", adapter); game_news_list.setAdapter(adapter); typeListAdapter = new GameNewsTypeListAdapter(GameNewsActivity.this, typeList, "全部"); game_news_top_type_list.setAdapter(typeListAdapter); ViewGroup.LayoutParams params = game_news_top_type_list.getLayoutParams(); params.height = (int) Math.ceil(typeList.size() / 5f) * DisplayUtils.dip2px(GameNewsActivity.this, 35) + DisplayUtils.dip2px(GameNewsActivity.this, 12); game_news_top_type_list.setLayoutParams(params); } @Override public void onFailure(HttpException e) { super.onFailure(e); } }); } public void onEventMainThread(EBTypeChange change) { adapter = adapterMap.get(change.getType()); if (adapter == null) { adapter = new GameNewsAdapter(GameNewsActivity.this, typeList, game_news_list, gameId, change.getType(), entrance, mNoDataLl); adapterMap.put(change.getType(), adapter); } game_news_list.setAdapter(adapter); game_news_top_type_list.setVisibility(View.GONE); ivSearch.setVisibility(View.GONE); typeListAdapter.setNewsType(change.getType(), change.getPosition()); } @Override public void onClick(View v) { if (v == ivSearch) { game_news_list.scrollToPosition(0); game_news_top_type_list.setVisibility(View.GONE); ivSearch.setVisibility(View.GONE); adapter.openKeyBoard(); } } }