主界面
布局
CoordinatorLayout是一个增强型的FrameLayout
Toolbar的layout_height属性,要用“?attr/actionBarSize”而不是“?android:attr/actionBarSize”,替换后可解决NavigationIcon不垂直居中的问题。
ctionBarDrawerToggle 是 DrawerLayout.DrawerListener 实现。和 NavigationDrawer 搭配使用,推荐用这个方法,符合Android design规范。
getSupportFragmentManager().beginTransaction().replace(R.id.fl_content, mLatestFragment).commit();
public void setArguments(Bundle args)
该方法给该Fragment对象提供构建参数。它只在Fragment对象被绑定到它Activity对象之前被调用,也就是说在构建该Fragment对象之后,应该立即调用。该方法提供的参数会在Fragment对象销毁和创建期间被保留。
RecyclerView
它需要使用ViewHolder。使用时需要重写两个主要方法:一个用来展现视图和它的持有者,而另一个用来把数据绑定到视图上。这么做的好处是,第一种方法只有当我们真正需要创建一个新视图时才被调用,不需要检查它是否已经被回收。
通过Adaper传递List到RecyclerView,在Adapter中进行刷新,监听等。然后监听点击事件中跳转到一篇具体文章的内容,在这里使用到UIL框架,用Gson得到文章具体内容。在此之前的都是获得一些比较单一的信息,比如id,name,images等。
首先List的单个View。
StorySimple
public class StorySimple
implements Parcelable {
private int id ;
private List<String> images ;
private String title ;
private String multipic ;
public void setTitle(String title) {
this. title = title ;
}
public String getTitle() {
return title ;
}
public void setId( int id) {
this. id = id ;
}
public int getId() {
return id ;
}
public void setImages(List<String> images) {
this. images = images ;
}
public List<String> getImages() {
return images ;
}
public void setMultipic(String multipic) {
this. multipic = multipic ;
}
public String getMultipic() {
return multipic ;
}
@Override
public String toString() {
return "StorySimple{" +
"id=" + id +
", images=" + images +
", title='" + title + ' \' ' +
", multipic='" + multipic + ' \' ' +
'}' ;
}
public StorySimple(){}
protected StorySimple(Parcel in) {
this. id=in.readInt() ;
this. images=in.createStringArrayList() ;
this. title=in.readString() ;
this. multipic=in.readString() ;
}
public static final Creator<StorySimple> CREATOR = new Creator<StorySimple>() {
@Override
public StorySimple createFromParcel(Parcel in) {
return new StorySimple(in) ;
}
@Override
public StorySimple[] newArray( int size) {
return new StorySimple[size] ;
}
} ;
@Override
public int describeContents() {
return 0 ;
}
@Override
public void writeToParcel(Parcel dest , int flags) {
dest.writeInt( this. id) ;
dest.writeStringList( this. images) ;
dest.writeString( this. title) ;
dest.writeString( this. multipic) ;
}
}
private int id ;
private List<String> images ;
private String title ;
private String multipic ;
public void setTitle(String title) {
this. title = title ;
}
public String getTitle() {
return title ;
}
public void setId( int id) {
this. id = id ;
}
public int getId() {
return id ;
}
public void setImages(List<String> images) {
this. images = images ;
}
public List<String> getImages() {
return images ;
}
public void setMultipic(String multipic) {
this. multipic = multipic ;
}
public String getMultipic() {
return multipic ;
}
@Override
public String toString() {
return "StorySimple{" +
"id=" + id +
", images=" + images +
", title='" + title + ' \' ' +
", multipic='" + multipic + ' \' ' +
'}' ;
}
public StorySimple(){}
protected StorySimple(Parcel in) {
this. id=in.readInt() ;
this. images=in.createStringArrayList() ;
this. title=in.readString() ;
this. multipic=in.readString() ;
}
public static final Creator<StorySimple> CREATOR = new Creator<StorySimple>() {
@Override
public StorySimple createFromParcel(Parcel in) {
return new StorySimple(in) ;
}
@Override
public StorySimple[] newArray( int size) {
return new StorySimple[size] ;
}
} ;
@Override
public int describeContents() {
return 0 ;
}
@Override
public void writeToParcel(Parcel dest , int flags) {
dest.writeInt( this. id) ;
dest.writeStringList( this. images) ;
dest.writeString( this. title) ;
dest.writeString( this. multipic) ;
}
}
Parcelable ?
先实现视图的实现。
自定义ViewHolder。
public class MyRecyclerViewHolder
extends RecyclerView.ViewHolder {
//RecyclerView必须使用viewHolder
public TextView tv_story_title ;
public ImageView img_story_image ;
public ImageView iv_multiPic ;
public MyRecyclerViewHolder(View itemView) {
super(itemView) ;
tv_story_title = (TextView) itemView.findViewById(R.id. tv_title) ;
img_story_image= (ImageView) itemView.findViewById(R.id. iv_image) ;
iv_multiPic= (ImageView) itemView.findViewById(R.id. iv_multiPic) ;
}
}
//RecyclerView必须使用viewHolder
public TextView tv_story_title ;
public ImageView img_story_image ;
public ImageView iv_multiPic ;
public MyRecyclerViewHolder(View itemView) {
super(itemView) ;
tv_story_title = (TextView) itemView.findViewById(R.id. tv_title) ;
img_story_image= (ImageView) itemView.findViewById(R.id. iv_image) ;
iv_multiPic= (ImageView) itemView.findViewById(R.id. iv_multiPic) ;
}
}
自定义Adapter继承ViewHolder.
public class RecyclerViewAdapter
extends RecyclerView.Adapter<MyRecyclerViewHolder> {
private OnItemClickListener mListener ;
private Context mContext ;
private List<StorySimple> mStories ;
public RecyclerViewAdapter(Context context , List<StorySimple> stories){
mContext=context ;
mStories=stories ;
}
@Override
public MyRecyclerViewHolder onCreateViewHolder(ViewGroup parent , int viewType) {
View view= LayoutInflater. from( mContext).inflate(R.layout. card_view ,parent ,false) ;
MyRecyclerViewHolder holder= new MyRecyclerViewHolder(view) ;
return holder ; //这是为什么呢 应该是会执行一次,有执行顺序
}
@Override
public void onBindViewHolder( final MyRecyclerViewHolder holder , final int position) {
ZLog. d( this, mStories.get(position).getTitle()) ;
holder. tv_story_title.setText( mStories.get(position).getTitle().toString()) ;
if ( mStories.get(position).getImages()!= null){
final ImageLoader imageLoader=ImageLoader. getInstance() ;
DisplayImageOptions options= new DisplayImageOptions.Builder()
.cacheInMemory( true)
.cacheOnDisk( true)
.build() ;
if ( mStories.get(position).getImages().size()== 1){
imageLoader.displayImage( mStories.get(position).getImages().get( 0)
,holder. img_story_image ,options) ;
}
} else {
// holder.img_story_image.setVisibility(View.GONE);
holder. img_story_image.setImageResource(R.drawable. readericon) ;
}
if (Boolean. valueOf( mStories.get(position).getMultipic())== true){
holder. iv_multiPic.setVisibility(View. VISIBLE) ;
} else {
holder. iv_multiPic.setVisibility(View. GONE) ;
}
if ( mListener!= null){
holder. itemView.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onItemClick( holder. itemView , holder.getPosition()) ;
}
}) ;
}
}
@Override
public int getItemCount() {
return mStories.size() ;
}
public void addDataList(List<StorySimple> items){
mStories.clear() ;
mStories.addAll(items) ;
notifyDataSetChanged() ;
}
public void setOnItemClickListener(OnItemClickListener listener){
mListener=listener ;
}
}
private OnItemClickListener mListener ;
private Context mContext ;
private List<StorySimple> mStories ;
public RecyclerViewAdapter(Context context , List<StorySimple> stories){
mContext=context ;
mStories=stories ;
}
@Override
public MyRecyclerViewHolder onCreateViewHolder(ViewGroup parent , int viewType) {
View view= LayoutInflater. from( mContext).inflate(R.layout. card_view ,parent ,false) ;
MyRecyclerViewHolder holder= new MyRecyclerViewHolder(view) ;
return holder ; //这是为什么呢 应该是会执行一次,有执行顺序
}
@Override
public void onBindViewHolder( final MyRecyclerViewHolder holder , final int position) {
ZLog. d( this, mStories.get(position).getTitle()) ;
holder. tv_story_title.setText( mStories.get(position).getTitle().toString()) ;
if ( mStories.get(position).getImages()!= null){
final ImageLoader imageLoader=ImageLoader. getInstance() ;
DisplayImageOptions options= new DisplayImageOptions.Builder()
.cacheInMemory( true)
.cacheOnDisk( true)
.build() ;
if ( mStories.get(position).getImages().size()== 1){
imageLoader.displayImage( mStories.get(position).getImages().get( 0)
,holder. img_story_image ,options) ;
}
} else {
// holder.img_story_image.setVisibility(View.GONE);
holder. img_story_image.setImageResource(R.drawable. readericon) ;
}
if (Boolean. valueOf( mStories.get(position).getMultipic())== true){
holder. iv_multiPic.setVisibility(View. VISIBLE) ;
} else {
holder. iv_multiPic.setVisibility(View. GONE) ;
}
if ( mListener!= null){
holder. itemView.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onItemClick( holder. itemView , holder.getPosition()) ;
}
}) ;
}
}
@Override
public int getItemCount() {
return mStories.size() ;
}
public void addDataList(List<StorySimple> items){
mStories.clear() ;
mStories.addAll(items) ;
notifyDataSetChanged() ;
}
public void setOnItemClickListener(OnItemClickListener listener){
mListener=listener ;
}
}
自定义Fragment。其中监听事件在这里实现。
public class LatestFragment
extends Fragment
implements SwipeRefreshLayout.OnRefreshListener{
private SwipeRefreshLayout mSwipeRefreshLayout ;
private RecyclerView mRecyclerView ;
private Boolean mIsDataLoaded = true;
private Latest mLatest ;
private RecyclerViewAdapter mAdapter ;
private List<StorySimple> mStories ;
private final String TAG= "LatestFragment" ;
private final int LOAD_DATA_FAIL = 1 ;
private final int LOAD_DATA_SUCCESS= 2 ;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater , @Nullable ViewGroup container , @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout. fragment_main ,container ,false) ;
mSwipeRefreshLayout= (SwipeRefreshLayout) view.findViewById(R.id. srfl_frag) ;
mRecyclerView= (RecyclerView) view.findViewById(R.id. rv_frag) ;
mSwipeRefreshLayout.setColorSchemeResources(R.color. colorPrimary
,R.color. green ,R.color. yellow) ;
mRecyclerView.setAdapter( mAdapter) ;
mAdapter.setOnItemClickListener( new OnItemClickListener() {
@Override
public void onItemClick(View view , int position) {
Intent intent= new Intent(getActivity() ,StoryDetailActivity. class) ;
intent.putExtra( "story_simple" , mStories.get(position)) ;
startActivity(intent) ;
ZLog. d( this, "position id:"+ mStories.get(position).getId()) ;
}
}) ;
mRecyclerView.setLayoutManager( new LinearLayoutManager(getActivity()
,LinearLayoutManager. VERTICAL ,false)) ;
return view ;
}
@Override
public void onRefresh() {
loadLatestData() ;
}
private void loadLatestData() {
MyHttpClient. httpGet(MyHttpUrl. DAILY_BASEURL + MyHttpUrl. LATEST , new Callback() {
@Override
public void onFailure(Call call , IOException e) {
mHandler.sendEmptyMessage( LOAD_DATA_FAIL) ;
}
@Override
public void onResponse(Call call , Response response) throws IOException {
mLatest= GsonUtils. getObject(response.body().string() ,Latest. class) ;
mHandler.sendEmptyMessage( LOAD_DATA_SUCCESS) ;
System. out.println( "++++ mLatest data:"+ mLatest.toString()+ "mLatest story title"+
mLatest.getStories().get( 0).getTitle()) ;
}
}) ;
}
private Handler mHandler= new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg. what){
case LOAD_DATA_FAIL:
break;
case LOAD_DATA_SUCCESS:
mStories= mLatest.getStories() ;
mAdapter.addDataList( mStories) ;
break;
}
mSwipeRefreshLayout.setRefreshing( false) ;
}
} ;
@Override
public void onAttach(Context context) {
super.onAttach(context) ;
mStories= new ArrayList<>() ;
mAdapter= new RecyclerViewAdapter(getActivity() , mStories) ;
}
@Override
public void onActivityCreated( @Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState) ;
mSwipeRefreshLayout.post( new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing( true) ;
loadLatestData() ;
}
}) ;
}
@Override
public void onDestroyView() {
super.onDestroyView() ;
}
}
private SwipeRefreshLayout mSwipeRefreshLayout ;
private RecyclerView mRecyclerView ;
private Boolean mIsDataLoaded = true;
private Latest mLatest ;
private RecyclerViewAdapter mAdapter ;
private List<StorySimple> mStories ;
private final String TAG= "LatestFragment" ;
private final int LOAD_DATA_FAIL = 1 ;
private final int LOAD_DATA_SUCCESS= 2 ;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater , @Nullable ViewGroup container , @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout. fragment_main ,container ,false) ;
mSwipeRefreshLayout= (SwipeRefreshLayout) view.findViewById(R.id. srfl_frag) ;
mRecyclerView= (RecyclerView) view.findViewById(R.id. rv_frag) ;
mSwipeRefreshLayout.setColorSchemeResources(R.color. colorPrimary
,R.color. green ,R.color. yellow) ;
mRecyclerView.setAdapter( mAdapter) ;
mAdapter.setOnItemClickListener( new OnItemClickListener() {
@Override
public void onItemClick(View view , int position) {
Intent intent= new Intent(getActivity() ,StoryDetailActivity. class) ;
intent.putExtra( "story_simple" , mStories.get(position)) ;
startActivity(intent) ;
ZLog. d( this, "position id:"+ mStories.get(position).getId()) ;
}
}) ;
mRecyclerView.setLayoutManager( new LinearLayoutManager(getActivity()
,LinearLayoutManager. VERTICAL ,false)) ;
return view ;
}
@Override
public void onRefresh() {
loadLatestData() ;
}
private void loadLatestData() {
MyHttpClient. httpGet(MyHttpUrl. DAILY_BASEURL + MyHttpUrl. LATEST , new Callback() {
@Override
public void onFailure(Call call , IOException e) {
mHandler.sendEmptyMessage( LOAD_DATA_FAIL) ;
}
@Override
public void onResponse(Call call , Response response) throws IOException {
mLatest= GsonUtils. getObject(response.body().string() ,Latest. class) ;
mHandler.sendEmptyMessage( LOAD_DATA_SUCCESS) ;
System. out.println( "++++ mLatest data:"+ mLatest.toString()+ "mLatest story title"+
mLatest.getStories().get( 0).getTitle()) ;
}
}) ;
}
private Handler mHandler= new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg. what){
case LOAD_DATA_FAIL:
break;
case LOAD_DATA_SUCCESS:
mStories= mLatest.getStories() ;
mAdapter.addDataList( mStories) ;
break;
}
mSwipeRefreshLayout.setRefreshing( false) ;
}
} ;
@Override
public void onAttach(Context context) {
super.onAttach(context) ;
mStories= new ArrayList<>() ;
mAdapter= new RecyclerViewAdapter(getActivity() , mStories) ;
}
@Override
public void onActivityCreated( @Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState) ;
mSwipeRefreshLayout.post( new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing( true) ;
loadLatestData() ;
}
}) ;
}
@Override
public void onDestroyView() {
super.onDestroyView() ;
}
}
public class ThemeFragment
extends Fragment
implements SwipeRefreshLayout.OnRefreshListener {
private SwipeRefreshLayout mSwipeRefreshLayout ;
private RecyclerView mRecyclerView ;
private Boolean mIsDataLoaded = true;
private ThemeStories mThemeStories ;
private RecyclerViewAdapter mAdapter ;
private List<StorySimple> Stories ;
private final String TAG= "ThemeFragment" ;
private final int LOAD_DATA_FAIL = 1 ;
private final int DATA_LOAD_SUCCESS= 2 ;
private int mThemeId ;
private Handler mHandler= new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg. what){
case LOAD_DATA_FAIL:
break;
case DATA_LOAD_SUCCESS:
Stories= mThemeStories.getStories() ;
mAdapter.addDataList( Stories) ;
break;
}
mSwipeRefreshLayout.setRefreshing( false) ;
}
} ;
@Override
public void onAttach(Context context) {
super.onAttach(context) ;
Stories= new ArrayList<>() ;
mAdapter= new RecyclerViewAdapter(getActivity() , Stories) ;
}
@Override
public void onActivityCreated( @Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState) ;
mSwipeRefreshLayout.post( new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing( true) ;
loadThemeData() ;
}
}) ;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater , @Nullable ViewGroup container ,
@Nullable Bundle savedInstanceState) {
mThemeId=getArguments().getInt( "themeId") ;
View view=inflater.inflate(R.layout. fragment_main ,container ,false) ;
mSwipeRefreshLayout= (SwipeRefreshLayout) view.findViewById(R.id. srfl_frag) ;
mRecyclerView= (RecyclerView) view.findViewById(R.id. rv_frag) ;
mSwipeRefreshLayout.setColorSchemeResources(R.color. colorPrimary
,R.color. green ,R.color. yellow) ;
mSwipeRefreshLayout.setOnRefreshListener( this) ;
mRecyclerView.setAdapter( mAdapter) ;
mAdapter.setOnItemClickListener( new OnItemClickListener() {
@Override
public void onItemClick(View view , int position) {
Intent intent= new Intent(getActivity() ,StoryDetailActivity. class) ;
intent.putExtra( "story_simple" , Stories.get(position)) ;
startActivity(intent) ;
ZLog. d( this, "position id:"+ Stories.get(position).getId()) ;
}
}) ;
mRecyclerView.setLayoutManager( new LinearLayoutManager(getActivity() ,
LinearLayoutManager. VERTICAL ,false)) ;
return view ;
}
private void loadThemeData() {
MyHttpClient. httpGet(MyHttpUrl. Theme_BASE + mThemeId , new Callback() {
@Override
public void onFailure(Call call , IOException e) {
mHandler.sendEmptyMessage( LOAD_DATA_FAIL) ;
}
@Override
public void onResponse(Call call , Response response) throws IOException {
mThemeStories= GsonUtils. getObject(response.body().string() ,ThemeStories. class) ;
mHandler.sendEmptyMessage( DATA_LOAD_SUCCESS) ;
}
}) ;
}
@Override
public void onDestroyView() {
super.onDestroyView() ;
}
@Override
public void onRefresh() {
loadThemeData() ;
}
}
private SwipeRefreshLayout mSwipeRefreshLayout ;
private RecyclerView mRecyclerView ;
private Boolean mIsDataLoaded = true;
private ThemeStories mThemeStories ;
private RecyclerViewAdapter mAdapter ;
private List<StorySimple> Stories ;
private final String TAG= "ThemeFragment" ;
private final int LOAD_DATA_FAIL = 1 ;
private final int DATA_LOAD_SUCCESS= 2 ;
private int mThemeId ;
private Handler mHandler= new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg. what){
case LOAD_DATA_FAIL:
break;
case DATA_LOAD_SUCCESS:
Stories= mThemeStories.getStories() ;
mAdapter.addDataList( Stories) ;
break;
}
mSwipeRefreshLayout.setRefreshing( false) ;
}
} ;
@Override
public void onAttach(Context context) {
super.onAttach(context) ;
Stories= new ArrayList<>() ;
mAdapter= new RecyclerViewAdapter(getActivity() , Stories) ;
}
@Override
public void onActivityCreated( @Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState) ;
mSwipeRefreshLayout.post( new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing( true) ;
loadThemeData() ;
}
}) ;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater , @Nullable ViewGroup container ,
@Nullable Bundle savedInstanceState) {
mThemeId=getArguments().getInt( "themeId") ;
View view=inflater.inflate(R.layout. fragment_main ,container ,false) ;
mSwipeRefreshLayout= (SwipeRefreshLayout) view.findViewById(R.id. srfl_frag) ;
mRecyclerView= (RecyclerView) view.findViewById(R.id. rv_frag) ;
mSwipeRefreshLayout.setColorSchemeResources(R.color. colorPrimary
,R.color. green ,R.color. yellow) ;
mSwipeRefreshLayout.setOnRefreshListener( this) ;
mRecyclerView.setAdapter( mAdapter) ;
mAdapter.setOnItemClickListener( new OnItemClickListener() {
@Override
public void onItemClick(View view , int position) {
Intent intent= new Intent(getActivity() ,StoryDetailActivity. class) ;
intent.putExtra( "story_simple" , Stories.get(position)) ;
startActivity(intent) ;
ZLog. d( this, "position id:"+ Stories.get(position).getId()) ;
}
}) ;
mRecyclerView.setLayoutManager( new LinearLayoutManager(getActivity() ,
LinearLayoutManager. VERTICAL ,false)) ;
return view ;
}
private void loadThemeData() {
MyHttpClient. httpGet(MyHttpUrl. Theme_BASE + mThemeId , new Callback() {
@Override
public void onFailure(Call call , IOException e) {
mHandler.sendEmptyMessage( LOAD_DATA_FAIL) ;
}
@Override
public void onResponse(Call call , Response response) throws IOException {
mThemeStories= GsonUtils. getObject(response.body().string() ,ThemeStories. class) ;
mHandler.sendEmptyMessage( DATA_LOAD_SUCCESS) ;
}
}) ;
}
@Override
public void onDestroyView() {
super.onDestroyView() ;
}
@Override
public void onRefresh() {
loadThemeData() ;
}
}
并在MainActivity中通过判定ID来决定视图的选择。
public class MainActivity
extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
@Bind(R.id. fab)
FloatingActionButton mFab ;
@Bind(R.id. toolbar)
Toolbar mToolbar ;
@Bind(R.id. nav_view)
NavigationView mNavigationView ;
@Bind(R.id. drawer_layout)
DrawerLayout mDrawerLayout ;
private LatestFragment mLatestFragment ;
private ThemeFragment mThemeFragment ;
private long lastTime ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState) ;
setContentView(R.layout. activity_main) ;
ButterKnife. bind( this) ;
initView() ;
}
private void initView() {
setSupportActionBar( mToolbar) ;
mFab.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Utils. ToastMsg(MainActivity. this, "Test" , Toast. LENGTH_SHORT) ;
}
}) ;
ActionBarDrawerToggle toggle= new ActionBarDrawerToggle( this, mDrawerLayout , mToolbar ,
R.string. navigation_drawer_open ,R.string. navigation_drawer_close) ;
toggle.syncState() ; //?????
mDrawerLayout.setDrawerListener(toggle) ;
mNavigationView.setNavigationItemSelectedListener( this) ;
mNavigationView.setCheckedItem(R.id. nav_home) ;
mLatestFragment= new LatestFragment() ;
getSupportFragmentManager().beginTransaction().replace(
R.id. fl_content , mLatestFragment).commit() ;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId() ;
switch (id) {
case R.id. action_settings:
Intent intent= new Intent(MainActivity. this,LoginActivity. class) ;
// intent.putExtra("email",)
startActivity(intent) ;
onDestroy() ;
break;
case R.id. action_search:
break;
default:
break;
}
return super.onOptionsItemSelected(item) ;
}
@Override
public boolean onNavigationItemSelected(MenuItem item) {
item.setChecked( true) ;
selectNavItem(item.getItemId()) ;
mDrawerLayout.closeDrawers() ;
return true;
}
@Override
public void onBackPressed() {
if ( mDrawerLayout.isDrawerOpen(Gravity. LEFT)){
mDrawerLayout.closeDrawers() ;
} else {
long currentTime=System. currentTimeMillis() ;
if (currentTime- lastTime> 2000){
Snackbar. make( mFab , "再按一次退出" ,Snackbar. LENGTH_SHORT)
.setAction( "退出" , new View.OnClickListener() {
@Override
public void onClick(View v) {
finish() ;
}
}).show() ;
lastTime=currentTime ;
} else {
finish() ;
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu. toolbar_menu , menu) ;
return true;
}
private void selectNavItem( int id) {
switch (id){
case R.id. nav_home:
getSupportFragmentManager().beginTransaction().replace(
R.id. fl_content , mLatestFragment).commit() ;
break;
default:
mThemeFragment= new ThemeFragment() ;
Bundle bundle= new Bundle() ;
bundle.putInt( "themeId" ,getThemeId(id)) ;
mThemeFragment.setArguments(bundle) ;
getSupportFragmentManager().beginTransaction()
.replace(R.id. fl_content , mThemeFragment).commit() ;
break;
}
}
public int getThemeId( int id) {
int themeId=- 1 ;
switch (id){
case R.id. nav_psychology:
themeId= 13 ;
break;
case R.id. nav_user_recommended:
themeId= 12 ;
break;
case R.id. nav_movie:
themeId= 3 ;
break;
case R.id. nav_not_allowed_bored:
themeId= 11 ;
break;
case R.id. nav_design:
themeId= 4 ;
break;
case R.id. nav_big_company:
themeId= 5 ;
break;
case R.id. nav_economic:
themeId= 6 ;
break;
case R.id. nav_internet_safety:
themeId= 10 ;
break;
case R.id. nav_start_games:
themeId= 2 ;
break;
case R.id. nav_music:
themeId= 7 ;
break;
case R.id. nav_cartoon:
themeId= 9 ;
break;
case R.id. nav_sports:
themeId= 8 ;
break;
}
return themeId ;
}
}
implements NavigationView.OnNavigationItemSelectedListener {
@Bind(R.id. fab)
FloatingActionButton mFab ;
@Bind(R.id. toolbar)
Toolbar mToolbar ;
@Bind(R.id. nav_view)
NavigationView mNavigationView ;
@Bind(R.id. drawer_layout)
DrawerLayout mDrawerLayout ;
private LatestFragment mLatestFragment ;
private ThemeFragment mThemeFragment ;
private long lastTime ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState) ;
setContentView(R.layout. activity_main) ;
ButterKnife. bind( this) ;
initView() ;
}
private void initView() {
setSupportActionBar( mToolbar) ;
mFab.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Utils. ToastMsg(MainActivity. this, "Test" , Toast. LENGTH_SHORT) ;
}
}) ;
ActionBarDrawerToggle toggle= new ActionBarDrawerToggle( this, mDrawerLayout , mToolbar ,
R.string. navigation_drawer_open ,R.string. navigation_drawer_close) ;
toggle.syncState() ; //?????
mDrawerLayout.setDrawerListener(toggle) ;
mNavigationView.setNavigationItemSelectedListener( this) ;
mNavigationView.setCheckedItem(R.id. nav_home) ;
mLatestFragment= new LatestFragment() ;
getSupportFragmentManager().beginTransaction().replace(
R.id. fl_content , mLatestFragment).commit() ;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId() ;
switch (id) {
case R.id. action_settings:
Intent intent= new Intent(MainActivity. this,LoginActivity. class) ;
// intent.putExtra("email",)
startActivity(intent) ;
onDestroy() ;
break;
case R.id. action_search:
break;
default:
break;
}
return super.onOptionsItemSelected(item) ;
}
@Override
public boolean onNavigationItemSelected(MenuItem item) {
item.setChecked( true) ;
selectNavItem(item.getItemId()) ;
mDrawerLayout.closeDrawers() ;
return true;
}
@Override
public void onBackPressed() {
if ( mDrawerLayout.isDrawerOpen(Gravity. LEFT)){
mDrawerLayout.closeDrawers() ;
} else {
long currentTime=System. currentTimeMillis() ;
if (currentTime- lastTime> 2000){
Snackbar. make( mFab , "再按一次退出" ,Snackbar. LENGTH_SHORT)
.setAction( "退出" , new View.OnClickListener() {
@Override
public void onClick(View v) {
finish() ;
}
}).show() ;
lastTime=currentTime ;
} else {
finish() ;
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu. toolbar_menu , menu) ;
return true;
}
private void selectNavItem( int id) {
switch (id){
case R.id. nav_home:
getSupportFragmentManager().beginTransaction().replace(
R.id. fl_content , mLatestFragment).commit() ;
break;
default:
mThemeFragment= new ThemeFragment() ;
Bundle bundle= new Bundle() ;
bundle.putInt( "themeId" ,getThemeId(id)) ;
mThemeFragment.setArguments(bundle) ;
getSupportFragmentManager().beginTransaction()
.replace(R.id. fl_content , mThemeFragment).commit() ;
break;
}
}
public int getThemeId( int id) {
int themeId=- 1 ;
switch (id){
case R.id. nav_psychology:
themeId= 13 ;
break;
case R.id. nav_user_recommended:
themeId= 12 ;
break;
case R.id. nav_movie:
themeId= 3 ;
break;
case R.id. nav_not_allowed_bored:
themeId= 11 ;
break;
case R.id. nav_design:
themeId= 4 ;
break;
case R.id. nav_big_company:
themeId= 5 ;
break;
case R.id. nav_economic:
themeId= 6 ;
break;
case R.id. nav_internet_safety:
themeId= 10 ;
break;
case R.id. nav_start_games:
themeId= 2 ;
break;
case R.id. nav_music:
themeId= 7 ;
break;
case R.id. nav_cartoon:
themeId= 9 ;
break;
case R.id. nav_sports:
themeId= 8 ;
break;
}
return themeId ;
}
}