Skip to content

Instantly share code, notes, and snippets.

@luck-alex13
Last active March 29, 2018 08:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save luck-alex13/176018d654a6c6a43d345952d98cbed8 to your computer and use it in GitHub Desktop.
Save luck-alex13/176018d654a6c6a43d345952d98cbed8 to your computer and use it in GitHub Desktop.
my bug
public class AbstractFragment extends Fragment {
protected int fragmentId, toolbarTitle;
private FragmentActivity activity;
public AbstractFragment() {
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
if(savedInstanceState != null){
fragmentId = savedInstanceState.getInt(FRAGMENT_ID);
toolbarTitle = savedInstanceState.getInt(TITLE_RES);
}else {
}
super.onCreate(savedInstanceState);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
activity = getActivity();
}
@Override
public void onStart() {
super.onStart();
getMainActivity().setCheckedItem(fragmentId);
getMainActivity().updateToolbarTitle(toolbarTitle);
}
@Override
public void onDetach() {
getMainActivity().deselectItem(fragmentId);
super.onDetach();
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putInt(FRAGMENT_ID, fragmentId);
outState.putInt(TITLE_RES, toolbarTitle);
super.onSaveInstanceState(outState);
}
protected CoreMainActivity getMainActivity(){
return (CoreMainActivity) activity;
}
}
@Override
protected void onResume() {
super.onResume();
Utils.p(TAG_M, "onResume" + this.hashCode());
startLogin();
}
/**
* Ивент о том, что в сервисе прошла авторизация и обновлены необходимые данные
*
* @param event {@link RestServiceEvent}
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(RestServiceEvent event) {
started = false;
Utils.p(TAG_M, "RestServiceEvent() " + event.getAction());
handleRestServiceEvent(event);
}
protected void handleRestServiceEvent(RestServiceEvent event) {
Utils.p(TAG, "handleRestServiceEvent event =" + event.getAction());
if (event.getAction().equals(RestServiceEvent.Action.SERVICE_READY)) {
replaceFragment(new OffersListMainFragment());
}else{
//неважно что
}
}
protected void replaceFragment(Fragment fragment) {
if (fragment == null) {
fragment = new OffersListMainFragment();
CURRENT_TAG = OffersListMainFragment.class.getSimpleName();
} else {
CURRENT_TAG = fragment.getClass().getSimpleName();
}
Utils.p(TAG, "replaceFragment CURRENT_TAG = " + CURRENT_TAG);
hideKeyboard();
if (isFragmentOnTop(CURRENT_TAG)) { // проверка есть ли этот фрагмент в стеке
Utils.p(TAG, CURRENT_TAG + " is already on top ");
closeDrawerMenu();
return; // если есть выкидываем из метода
}
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
if (!launched) {
launched = true;
Utils.p(TAG, "First launch -> current fragment = " + CURRENT_TAG);
fragmentTransaction.replace(R.id.content_main, fragment);
} else {
fragmentTransaction.replace(R.id.content_main, fragment, CURRENT_TAG);
fragmentTransaction.addToBackStack(CURRENT_TAG);
}
fragmentTransaction.commit();
}
public boolean isFragmentOnTop(String tag) {
int index = getSupportFragmentManager().getBackStackEntryCount() - 1;// last index
if (index >= 0) {
FragmentManager.BackStackEntry backEntry = getSupportFragmentManager().getBackStackEntryAt(index);
return backEntry.getName().equals(tag);
} else
return false;
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.iogames.easymoneycore.ui_modules.activity.CoreMainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay"
app:elevation="0dp">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_main"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
</android.support.design.widget.CoordinatorLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.iogames.easymoneycore.ui_modules.activity.CoreMainActivity"
tools:showIn="@layout/activity_core_main">
<FrameLayout
android:id="@+id/content_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.TabLayout
android:id="@+id/offer_tabs_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:elevation="2dp"
app:tabIndicatorColor="@color/colorAccent"
app:tabIndicatorHeight="3dp"
app:tabMode="fixed"
app:tabSelectedTextColor="@android:color/white"
app:tabTextColor="@color/whiteColorUnselected" />
<android.support.v4.view.ViewPager
android:id="@+id/view_pager_offers"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/offer_tabs_layout" />
</RelativeLayout>
</layout>
public class OffersListMainFragment extends AbstractFragment {
private FragmentOffersListMainBinding binding;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
fragmentId = Const.DrawerID.TASKS;
toolbarTitle = R.string.title_easy_money;
super.onCreate(savedInstanceState);
}
private int countLaunches;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_offers_list_main, container, false);
// Initialize the ViewPager and set an adapter
ArrayList<Fragment> tabFragmentList = new ArrayList<>();
tabFragmentList.add(new AllOffersListFragment());
tabFragmentList.add(new UsersOfferListFragment());
tabFragmentList.add(new OldOfferListFragment());
String[] TITLES = {
Utils.getString(R.string.our_tasks),
Utils.getString(R.string.title_pinned),
Utils.getString(R.string.completed)
};
binding.viewPagerOffers.setAdapter(new TabsFragmentAdapter(getChildFragmentManager(), tabFragmentList, TITLES));
binding.offerTabsLayout.setupWithViewPager(binding.viewPagerOffers);
countLaunches = 0;
return binding.getRoot();
}
@Override
public void onStart() {
getActivity().invalidateOptionsMenu();
super.onStart();
}
}
public class TabsFragmentAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> tabsList;
private String[] titlesArray;
public TabsFragmentAdapter(FragmentManager frManager, ArrayList<Fragment> fragmentList, String[] titles) {
super(frManager);
this.tabsList = fragmentList;
this.titlesArray = titles;
}
@Override
public CharSequence getPageTitle(int position) {
return this.titlesArray[position];
}
@Override
public Fragment getItem(int position) {
return tabsList.get(position);
}
@Override
public int getCount() {
return tabsList.size();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment