From 481e195e6a5f94425059a0a268dd9eca742f5593 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 31 May 2017 10:14:29 +0300 Subject: fix current fragment rescan after operation --- .../java/org/fox/ttcomics2/ComicListFragment.java | 4 - .../main/java/org/fox/ttcomics2/MainActivity.java | 182 +++++++++++---------- .../src/main/res/layout/activity_main.xml | 19 ++- 3 files changed, 109 insertions(+), 96 deletions(-) (limited to 'org.fox.ttcomics') diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java index d35643e..f87c1c7 100755 --- a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java +++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java @@ -464,10 +464,6 @@ public class ComicListFragment extends Fragment implements OnItemClickListener { Log.d(TAG, "baseDir=" + m_baseDirectory); - if (m_activity.getMode() != m_mode) { - m_mode = m_activity.getMode(); - } - if (m_activity.m_databaseHelper.getCachedItemCount(m_baseDirectory) == 0) { rescan(); } else { diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java index 2dd75d3..ddb1fb1 100755 --- a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java +++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java @@ -14,13 +14,18 @@ import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.os.Bundle; +import android.os.Handler; import android.support.v4.app.ActivityCompat; -import android.support.v4.app.FragmentTransaction; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.content.ContextCompat; +import android.support.v4.view.ViewPager; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.Menu; import android.view.MenuItem; +import android.view.ViewGroup; import org.fox.ttcomics2.sync.SyncClient; import org.fox.ttcomics2.sync.SyncFolderService; @@ -32,10 +37,11 @@ import java.util.Arrays; public class MainActivity extends CommonActivity implements SharedPreferences.OnSharedPreferenceChangeListener { private final String TAG = this.getClass().getSimpleName(); - private int m_selectedTab; - //private MaterialTabHost tabHost; private ProgressDialog m_progressDialog; private boolean m_needRestart; + private ComicsPagerAdapter m_adapter; + private String m_baseDir; + private ViewPager m_pager; private BroadcastReceiver m_serviceReceiver = new BroadcastReceiver() { @Override @@ -73,59 +79,56 @@ public class MainActivity extends CommonActivity implements SharedPreferences.On m_progressDialog = new ProgressDialog(this); - //tabHost = (MaterialTabHost) this.findViewById(R.id.materialTabHost); + m_adapter = new ComicsPagerAdapter(getSupportFragmentManager()); - if (savedInstanceState == null) { - m_selectedTab = getIntent().getIntExtra("selectedTab", 0); + m_pager = (ViewPager) findViewById(R.id.comics_pager); + m_pager.setAdapter(m_adapter); + m_pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - //Log.d(TAG, "selTab=" + m_selectedTab); + } - ComicListFragment frag = new ComicListFragment(); - frag.setMode(m_selectedTab); + @Override + public void onPageSelected(final int position) { - if (getIntent().getStringExtra("baseDir") != null) { - frag.setBaseDirectory(getIntent().getStringExtra("baseDir")); - } else { - frag.setBaseDirectory(m_prefs.getString("comics_directory", "")); - } + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + ComicListFragment frag = (ComicListFragment) m_adapter.getItem(position); - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - ft.replace(R.id.comics_list, frag, FRAG_COMICS_LIST); - ft.commit(); - } else { - //m_baseDirectory = savedInstanceState.getString("baseDir"); - } + if (frag != null && frag.isAdded()) { + frag.refresh(); + } + } + }, 100); - m_selectedTab = -1; - /*tabHost.addTab(tabHost.newTab() - .setText(getString(R.string.tab_all_comics)) - .setTabListener(this)); + } - tabHost.addTab(tabHost.newTab() - .setText(getString(R.string.tab_unread)) - .setTabListener(this)); + @Override + public void onPageScrollStateChanged(int state) { - tabHost.addTab(tabHost.newTab() - .setText(getString(R.string.tab_unfinished)) - .setTabListener(this)); + } + }); - tabHost.addTab(tabHost.newTab() - .setText(getString(R.string.tab_read)) - .setTabListener(this));*/ + if (savedInstanceState == null) { + int selectedTab = getIntent().getIntExtra("selectedTab", 0); + Log.d(TAG, "selTab=" + selectedTab); + m_pager.setCurrentItem(selectedTab); + + if (getIntent().getStringExtra("baseDir") != null) { + m_baseDir = getIntent().getStringExtra("baseDir"); + } else { + m_baseDir = m_prefs.getString("comics_directory", ""); + } - if (savedInstanceState != null) { - m_selectedTab = savedInstanceState.getInt("selectedTab"); } else { - m_selectedTab = getIntent().getIntExtra("selectedTab", 0); + m_baseDir = savedInstanceState.getString("baseDir"); } - /*if (m_selectedTab != -1) - tabHost.setSelectedNavigationItem(m_selectedTab);*/ - - String[] permissions; if (isSyncEnabled()) { @@ -263,11 +266,7 @@ public class MainActivity extends CommonActivity implements SharedPreferences.On public void onSaveInstanceState(Bundle out) { super.onSaveInstanceState(out); - out.putInt("selectedTab", m_selectedTab); - } - - public int getMode() { - return m_selectedTab; + out.putString("baseDir", m_baseDir); } public boolean onOptionsItemSelected(MenuItem item) { @@ -279,14 +278,7 @@ public class MainActivity extends CommonActivity implements SharedPreferences.On .setCancelable(true) .setPositiveButton("Continue", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { - ComicListFragment frag = (ComicListFragment) getSupportFragmentManager().findFragmentByTag(FRAG_COMICS_LIST); - - if (frag != null && frag.isAdded()) { - String baseDir = frag.getBaseDirectory(); - - updateLastRead(baseDir); - } - + updateLastRead(m_baseDir); } }) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @@ -326,7 +318,7 @@ public class MainActivity extends CommonActivity implements SharedPreferences.On Intent intent = new Intent(MainActivity.this, MainActivity.class); - intent.putExtra("selectedTab", m_selectedTab); + intent.putExtra("selectedTab", m_pager.getCurrentItem()); intent.putExtra("baseDir", fileName); startActivity(intent); @@ -341,7 +333,7 @@ public class MainActivity extends CommonActivity implements SharedPreferences.On } else { toast(getString(R.string.error_cant_open_file, fileName)); - ComicListFragment frag = (ComicListFragment) getSupportFragmentManager().findFragmentByTag(FRAG_COMICS_LIST); + ComicListFragment frag = (ComicListFragment) m_adapter.getPrimaryItem(); if (frag != null && frag.isAdded()) { frag.rescan(); @@ -368,40 +360,10 @@ public class MainActivity extends CommonActivity implements SharedPreferences.On super.onActivityResult(requestCode, resultCode, intent); } - /*@Override - public void onTabSelected(MaterialTab tab) { - - tabHost.setSelectedNavigationItem(tab.getPosition()); - - FragmentTransaction sft = getSupportFragmentManager().beginTransaction(); - - if (m_selectedTab != tab.getPosition() && m_selectedTab != -1) { - - ComicListFragment frag = (ComicListFragment) getSupportFragmentManager().findFragmentByTag(FRAG_COMICS_LIST); - - if (frag != null && frag.isAdded()) { - frag.setMode(tab.getPosition()); - frag.refresh(); - } - } - - m_selectedTab = tab.getPosition(); - - sft.commit(); - }*/ - - /*@Override - public void onTabReselected(MaterialTab materialTab) { - - } - - @Override - public void onTabUnselected(MaterialTab materialTab) { - - }*/ - private void updateComicsList() { - ComicListFragment frag = (ComicListFragment) getSupportFragmentManager().findFragmentByTag(FRAG_COMICS_LIST); + ComicListFragment frag = (ComicListFragment) m_adapter.getPrimaryItem(); + + Log.d(TAG, "CLF=" + frag + " " + frag.isAdded()); if (frag != null && frag.isAdded()) { frag.refresh(); @@ -455,4 +417,48 @@ public class MainActivity extends CommonActivity implements SharedPreferences.On m_needRestart = Arrays.asList(filter).indexOf(key) != -1; } + + private class ComicsPagerAdapter extends FragmentStatePagerAdapter{ + private int[] m_pageTitles = { + R.string.tab_all_comics, + R.string.tab_unread, + R.string.tab_unfinished, + R.string.tab_read + }; + private Fragment m_primaryItem; + + public ComicsPagerAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public Fragment getItem(int position) { + ComicListFragment frag = new ComicListFragment(); + + frag.setMode(position); + frag.setBaseDirectory(m_baseDir); + + return frag; + } + + @Override + public int getCount() { + return 4; + } + + @Override + public void setPrimaryItem(ViewGroup container, int position, Object object) { + m_primaryItem = ((Fragment) object); + super.setPrimaryItem(container, position, object); + } + + @Override + public CharSequence getPageTitle(int position) { + return getString(m_pageTitles[position]); + } + + public Fragment getPrimaryItem() { + return m_primaryItem; + } + } } diff --git a/org.fox.ttcomics/src/main/res/layout/activity_main.xml b/org.fox.ttcomics/src/main/res/layout/activity_main.xml index 1c05df7..8d5203a 100755 --- a/org.fox.ttcomics/src/main/res/layout/activity_main.xml +++ b/org.fox.ttcomics/src/main/res/layout/activity_main.xml @@ -6,11 +6,22 @@ - + android:layout_height="match_parent"> - + + + \ No newline at end of file -- cgit v1.2.3