package com.dxjia.doubantop.activitys; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.AppBarLayout; import android.support.design.widget.CollapsingToolbarLayout; import android.support.v4.app.FragmentManager; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.widget.ImageView; import com.dxjia.doubantop.R; import com.dxjia.doubantop.datas.Favorites; import com.dxjia.doubantop.datas.beans.BeansUtils; import com.dxjia.doubantop.datas.beans.MovieMajorInfos; import com.dxjia.doubantop.fragments.DetailContentsFragment; import com.squareup.picasso.Picasso; import java.util.List; import butterknife.ButterKnife; import butterknife.InjectView; public class DetailActivity extends AppCompatActivity implements AppBarLayout.OnOffsetChangedListener { @InjectView(R.id.toolbar) Toolbar mToolbar; @InjectView(R.id.collapsing_toolbar) CollapsingToolbarLayout mCollapsingToolbar; @InjectView(R.id.image_expland) ImageView mMovieImageView; @InjectView(R.id.details_app_bar) AppBarLayout mAppBar; private DetailContentsFragment mDetailContentsFragment; private MovieMajorInfos mMovieInfos; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); ButterKnife.inject(this); Intent intent = getIntent(); if (intent == null && savedInstanceState == null) { return; } if (intent != null) { mMovieInfos = intent.getParcelableExtra(BeansUtils.MOVIE_MAJOR_INFOS_KEY); } else { mMovieInfos = savedInstanceState.getParcelable(BeansUtils.MOVIE_MAJOR_INFOS_KEY); } if (mMovieInfos == null) { return; } setSupportActionBar(mToolbar); final ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } setupContentsView(); } @Override public void onResume() { super.onResume(); if (mMovieInfos != null) { mCollapsingToolbar.setTitle(mMovieInfos.getMovieTitle()); Picasso.with(DetailActivity.this) .load(mMovieInfos.getMovieImageUri()) .resizeDimen(R.dimen.image_width, R.dimen.image_height) .centerCrop() .into(mMovieImageView); } mAppBar.addOnOffsetChangedListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_detail, menu); updateStarIcon(menu.getItem(0)); return true; } private void setupContentsView() { //details_container FragmentManager fm = getSupportFragmentManager(); mDetailContentsFragment = DetailContentsFragment.newInstance(mMovieInfos); fm.beginTransaction() .replace(R.id.details_container, mDetailContentsFragment, "DetailContentsFragment") .commit(); fm.executePendingTransactions(); } /** * 判断是否被收藏 */ private boolean isStared() { if (mMovieInfos == null) { return false; } String id = mMovieInfos.getMovieId(); if (TextUtils.isEmpty(id)) { return false; } List<Favorites> stars = Favorites.filterByMoiveId(id); if (stars.size() == 0) { return false; } else { return true; } } /** * 更新收藏状态 */ private void updateStarIcon(MenuItem menuItem) { if (menuItem != null) { if (isStared()) { menuItem.setIcon(R.mipmap.ic_stared); } else { menuItem.setIcon(R.mipmap.ic_unstared); } } } private void toggleStarStatus(MenuItem menuItem) { if (mMovieInfos == null) { return; } List<Favorites> stars = Favorites.filterByMoiveId(mMovieInfos.getMovieId()); if (stars == null || stars.size() == 0) { if (menuItem != null) { menuItem.setIcon(R.mipmap.ic_stared); } Favorites favorites = new Favorites(); favorites.fillDatas(mMovieInfos); favorites.save(); } else { Favorites star = stars.get(0); star.delete(); if (menuItem != null) { menuItem.setIcon(R.mipmap.ic_unstared); } } } @Override public void onStop() { super.onStop(); mAppBar.removeOnOffsetChangedListener(this); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); switch (id) { case R.id.action_collect: toggleStarStatus(item); return true; case android.R.id.home: this.finish(); return true; } return super.onOptionsItemSelected(item); } @Override public void onOffsetChanged(AppBarLayout appBarLayout, int i) { if (mDetailContentsFragment != null) { if (i == 0) { mDetailContentsFragment.setRefreshEnable(true); } else { mDetailContentsFragment.setRefreshEnable(false); } } } @Override public void onSaveInstanceState(Bundle out) { super.onSaveInstanceState(out); if (mMovieInfos != null) { out.putParcelable(BeansUtils.MOVIE_MAJOR_INFOS_KEY, mMovieInfos); out.setClassLoader(mMovieInfos.getClass().getClassLoader()); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { if (event.getKeyCode() == KeyEvent.KEYCODE_MENU){ return true; } } return super.onKeyDown(keyCode, event); } }