Java tutorial
/* * Copyright (C) 2014 Eric Butler * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.tapchatapp.android.app.fragment; import android.app.Activity; import android.app.Fragment; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.squareup.otto.Bus; import com.squareup.otto.Subscribe; import com.tapchatapp.android.R; import com.tapchatapp.android.app.activity.AddNetworkActivity; import com.tapchatapp.android.app.event.ServiceStateChangedEvent; import com.tapchatapp.android.app.ui.ConnectionsPagerAdapter; import com.tapchatapp.android.app.TapchatApp; import com.viewpagerindicator.TitlePageIndicator; import javax.inject.Inject; public class MainFragment extends Fragment { private int mPendingSelectItem = -1; private ConnectionsPagerAdapter mTabsAdapter; private ViewPager.OnPageChangeListener mPageChangeListener = new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { if (getActivity() == null) { return; } getActivity().invalidateOptionsMenu(); SharedPreferences.Editor editor = TapchatApp.get().getPreferences().edit(); editor.putInt(TapchatApp.PREF_SELECTED_CONNECTION, position); editor.apply(); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageScrollStateChanged(int state) { } }; @Inject Bus mBus; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TapchatApp.get().inject(this); setHasOptionsMenu(true); } @Override public void onResume() { super.onResume(); mBus.register(this); if (mTabsAdapter != null) { mTabsAdapter.registerBus(); } } @Override public void onPause() { super.onPause(); mBus.unregister(this); if (mTabsAdapter != null) { mTabsAdapter.unregisterBus(); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_main, null); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { getView().findViewById(R.id.add_network).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(getActivity(), AddNetworkActivity.class)); } }); final ViewPager viewPager = (ViewPager) getView().findViewById(R.id.pager); mTabsAdapter = (ConnectionsPagerAdapter) viewPager.getAdapter(); if (mTabsAdapter == null) { mTabsAdapter = new ConnectionsPagerAdapter(getActivity()); mTabsAdapter.registerBus(); viewPager.setAdapter(mTabsAdapter); final TitlePageIndicator tabs = (TitlePageIndicator) getView().findViewById(R.id.pager_tabs); tabs.setViewPager(viewPager); tabs.setOnPageChangeListener(mPageChangeListener); int selectedItem = TapchatApp.get().getPreferences().getInt(TapchatApp.PREF_SELECTED_CONNECTION, 0); if (viewPager.getChildCount() > selectedItem) { viewPager.setCurrentItem(selectedItem); } else { mPendingSelectItem = selectedItem; } } } @Subscribe public void onServiceStateChanged(ServiceStateChangedEvent event) { mTabsAdapter.notifyDataSetChanged(); final TitlePageIndicator tabs = (TitlePageIndicator) getView().findViewById(R.id.pager_tabs); tabs.notifyDataSetChanged(); final ViewPager viewPager = (ViewPager) getView().findViewById(R.id.pager); View view = getView(); if (view != null) { boolean showNoConnections = (mTabsAdapter.isLoaded() && mTabsAdapter.getCount() == 0); boolean showPager = mTabsAdapter.getCount() > 0; view.findViewById(R.id.no_connections).setVisibility(showNoConnections ? View.VISIBLE : View.GONE); view.findViewById(R.id.pager).setVisibility(showPager ? View.VISIBLE : View.GONE); view.findViewById(R.id.pager_tabs).setVisibility(showPager ? View.VISIBLE : View.GONE); } Activity activity = getActivity(); if (activity != null) { activity.invalidateOptionsMenu(); } // FIXME: Fix ViewPager to do this properly above. if (mPendingSelectItem >= 0 && mTabsAdapter.getCount() > mPendingSelectItem) { viewPager.setCurrentItem(mPendingSelectItem); mPendingSelectItem = -1; } } public ConnectionsPagerAdapter getTabsAdapter() { return mTabsAdapter; } }