Improve save
This commit is contained in:
1 parent
f785848fe0
commit
9495b026b6
8 files changed
+167
-8
No files matched your search
@@ -21,11 +21,11 @@ import android.os.Bundle;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.support.v4.widget.DrawerLayout;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.hippo.ehviewer.R;
|
||||
import com.hippo.ehviewer.ui.scene.GalleryListScene;
|
||||
import com.hippo.scene.StageActivity;
|
||||
import com.hippo.scene.StageLayout;
|
||||
import com.hippo.util.UiUtils;
|
||||
|
||||
public class ContentActivity extends StageActivity {
|
||||
@@ -34,7 +34,7 @@ public class ContentActivity extends StageActivity {
|
||||
|
||||
private DrawerLayout mDrawerLayout;
|
||||
private Toolbar mToolbar;
|
||||
private FrameLayout mStage;
|
||||
private StageLayout mStage;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@@ -45,7 +45,7 @@ public class ContentActivity extends StageActivity {
|
||||
|
||||
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
|
||||
mToolbar = (Toolbar) mDrawerLayout.findViewById(R.id.toolbar);
|
||||
mStage = (FrameLayout) mDrawerLayout.findViewById(R.id.stage);
|
||||
mStage = (StageLayout) mDrawerLayout.findViewById(R.id.stage);
|
||||
|
||||
setSupportActionBar(mToolbar);
|
||||
|
||||
@@ -58,7 +58,7 @@ public class ContentActivity extends StageActivity {
|
||||
}
|
||||
|
||||
@Override
|
||||
public FrameLayout getStageView() {
|
||||
public StageLayout getStageView() {
|
||||
return mStage;
|
||||
}
|
||||
}
|
||||
@@ -15,12 +15,16 @@
|
||||
|
||||
package com.hippo.ehviewer.ui.fragment;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.Activity;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcelable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.SparseArray;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -33,12 +37,15 @@ import com.hippo.ehviewer.R;
|
||||
import com.hippo.ehviewer.data.GalleryListUrlBuilder;
|
||||
import com.hippo.ehviewer.widget.AdvanceSearchTable;
|
||||
import com.hippo.ehviewer.widget.CategoryTable;
|
||||
import com.hippo.util.Log;
|
||||
import com.hippo.util.UiUtils;
|
||||
import com.hippo.util.ViewUtils;
|
||||
import com.hippo.widget.PrefixEditText;
|
||||
|
||||
public class SearchFragment extends Fragment implements CompoundButton.OnCheckedChangeListener {
|
||||
|
||||
private static final String VIEW_STATE_TAG = "android:view_state";
|
||||
|
||||
private static final int SEARCH_TYPE_NORMAL = 0;
|
||||
private static final int SEARCH_TYPE_TAG = 1;
|
||||
private static final int SEARCH_TYPE_IMAGE = 2;
|
||||
@@ -59,6 +66,7 @@ public class SearchFragment extends Fragment implements CompoundButton.OnChecked
|
||||
|
||||
private OnSearchListener mOnSearchListener;
|
||||
|
||||
private View mRootView;
|
||||
private RecyclerView mContainer;
|
||||
private View mNormalView;
|
||||
private CategoryTable mTableCategory;
|
||||
@@ -75,11 +83,24 @@ public class SearchFragment extends Fragment implements CompoundButton.OnChecked
|
||||
mOnSearchListener = listener;
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
if (savedInstanceState != null && mRootView != null) {
|
||||
SparseArray<Parcelable> savedStates = savedInstanceState.getSparseParcelableArray(VIEW_STATE_TAG);
|
||||
if (savedStates != null) {
|
||||
mRootView.restoreHierarchyState(savedStates);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public View onCreateView(LayoutInflater inflater,ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
mActivity = getActivity();
|
||||
|
||||
View mRootView = inflater.inflate(R.layout.fragment_search, container, false);
|
||||
mRootView = inflater.inflate(R.layout.fragment_search, container, false);
|
||||
|
||||
mContainer = (RecyclerView) mRootView.findViewById(R.id.search_container);
|
||||
|
||||
@@ -92,6 +113,13 @@ public class SearchFragment extends Fragment implements CompoundButton.OnChecked
|
||||
return mRootView;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
|
||||
mRootView = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
if (buttonView == mCheckSpecifyAuthor) {
|
||||
@@ -153,6 +181,9 @@ public class SearchFragment extends Fragment implements CompoundButton.OnChecked
|
||||
|
||||
@Override
|
||||
public SearchHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
|
||||
Log.d("TAG", "sdsd", new Exception("onCreateViewHolder"));
|
||||
|
||||
View view = mInflater.inflate(R.layout.search_category, parent, false);
|
||||
|
||||
ViewCompat.setElevation(view, UiUtils.dp2pix(4)); // TODO
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
package com.hippo.ehviewer.ui.scene;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentPagerAdapter;
|
||||
@@ -62,6 +63,16 @@ public class GalleryListScene extends Scene implements SearchFragment.OnSearchLi
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSaveInstanceState(Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onRestoreInstanceState(Bundle savedInstanceState) {
|
||||
super.onRestoreInstanceState(savedInstanceState);
|
||||
}
|
||||
|
||||
public class GalleryListPagerAdapter extends FragmentPagerAdapter {
|
||||
|
||||
public GalleryListPagerAdapter(FragmentManager fm) {
|
||||
|
||||
@@ -15,7 +15,10 @@
|
||||
|
||||
package com.hippo.scene;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcelable;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.util.SparseArray;
|
||||
import android.view.View;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
@@ -111,6 +114,20 @@ public abstract class Scene {
|
||||
finish();
|
||||
}
|
||||
|
||||
protected void onSaveInstanceState(Bundle outState) {
|
||||
SparseArray<Parcelable> states = new SparseArray<>();
|
||||
mRootView.saveHierarchyState(states);
|
||||
outState.putSparseParcelableArray(Integer.toHexString(hashCode()), states);
|
||||
}
|
||||
|
||||
protected void onRestoreInstanceState(Bundle savedInstanceState) {
|
||||
SparseArray<Parcelable> savedStates
|
||||
= savedInstanceState.getSparseParcelableArray(Integer.toHexString(hashCode()));
|
||||
if (savedStates != null) {
|
||||
mRootView.restoreHierarchyState(savedStates);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the FragmentManager for interacting with fragments associated
|
||||
* with StageActivity.
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
package com.hippo.scene;
|
||||
|
||||
import android.widget.FrameLayout;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.hippo.ehviewer.ui.AbsActionBarActivity;
|
||||
|
||||
@@ -30,7 +30,7 @@ public abstract class StageActivity extends AbsActionBarActivity {
|
||||
|
||||
private Scene mRetainedScene = null;
|
||||
|
||||
public abstract FrameLayout getStageView();
|
||||
public abstract StageLayout getStageView();
|
||||
|
||||
private void pushScene(Class sceneClass) {
|
||||
Scene scene = null;
|
||||
@@ -155,6 +155,30 @@ public abstract class StageActivity extends AbsActionBarActivity {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSaveInstanceState(Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
|
||||
for (Scene scene : mSceneStack) {
|
||||
scene.onSaveInstanceState(outState);
|
||||
}
|
||||
if (mCurrentScene != null) {
|
||||
mCurrentScene.onSaveInstanceState(outState);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onRestoreInstanceState(Bundle savedInstanceState) {
|
||||
super.onRestoreInstanceState(savedInstanceState);
|
||||
|
||||
for (Scene scene : mSceneStack) {
|
||||
scene.onRestoreInstanceState(savedInstanceState);
|
||||
}
|
||||
if (mCurrentScene != null) {
|
||||
mCurrentScene.onRestoreInstanceState(savedInstanceState);
|
||||
}
|
||||
}
|
||||
|
||||
interface SceneAction {
|
||||
public void doAction();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (C) 2015 Hippo Seven
|
||||
*
|
||||
* 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
|
||||
* 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.hippo.scene;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.Parcelable;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.SparseArray;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
public class StageLayout extends FrameLayout {
|
||||
|
||||
public StageLayout(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public StageLayout(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public StageLayout(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
public StageLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void dispatchSaveInstanceState(SparseArray<Parcelable> container) {
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void dispatchRestoreInstanceState(SparseArray<Parcelable> container) {
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,8 @@ package com.hippo.widget;
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcelable;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
@@ -28,6 +30,9 @@ import com.nineoldandroids.animation.ObjectAnimator;
|
||||
|
||||
public class CheckTextView extends TextView implements OnClickListener, Hotspotable {
|
||||
|
||||
private static final String STATE_KEY_SUPER = "super";
|
||||
private static final String STATE_KEY_CHECKED = "checked";
|
||||
|
||||
private static final int MASK = 0x8a000000;
|
||||
private static final long ANIMATION_DURATION = 150;
|
||||
|
||||
@@ -115,4 +120,21 @@ public class CheckTextView extends TextView implements OnClickListener, Hotspota
|
||||
return mChecked;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Parcelable onSaveInstanceState() {
|
||||
final Bundle state = new Bundle();
|
||||
state.putParcelable(STATE_KEY_SUPER, super.onSaveInstanceState());
|
||||
state.putBoolean(STATE_KEY_CHECKED, mChecked);
|
||||
return state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRestoreInstanceState(Parcelable state) {
|
||||
if (state instanceof Bundle) {
|
||||
final Bundle savedState = (Bundle) state;
|
||||
super.onRestoreInstanceState(savedState.getParcelable(STATE_KEY_SUPER));
|
||||
mChecked = savedState.getBoolean(STATE_KEY_CHECKED);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user