2017-12-28 24 views
0

私はいくつかの書籍を持っているアプリを開発しています。最後に開いたブックを開いて、そのアプリを閉じても開いたときに開く方法はわかりません。私は断片を使わず、ちょうどCustomSwipeAdapterImageViewTouchViewPagerViewPagerです。本の最後のページを保存し、本を開いたら読み込みますか?

すべてがうまくいきますが、実際にはこれが必要です。MainActivity現在の位置は保存できますが、アプリが終了する前に最後のページを表示するためにブックを開いたときに保存するように設定する方法はわかりません。

ありがとうございます。

public class CustomSwipeAdapter1 extends PagerAdapter{  

private int[] pagesBookOne = {R.drawable.pageone, R.drawable.pagetwo, R.drawable.pagethree}; 
    private Context context; 
    private LayoutInflater layoutInflater; 
    private ViewPager viewPager; 

public CustomSwipeAdapter1(Context context){ 

     this.context = context; 

    } 


    @Override 
    public int getCount() { 
     return paginasLivroUm.length; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return (view == (LinearLayout) object); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 

     layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View item_view = layoutInflater.inflate(R.layout.swipe_layout, container, false); 
     ImageViewTouch imageViewTouch = item_view.findViewById(R.id.imageviewtouch_xml); 
     imageViewTouch.setImageResource(paginasLivroUm[position]); 

     imageViewTouch.setDisplayType(ImageViewTouchBase.DisplayType.FIT_TO_SCREEN); 

     container.addView(item_view); 
     return item_view; 

    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView((LinearLayout) object); 
     //super.destroyItem(container, position, object); 

    } 

} 

========================================================== 


import android.os.PersistableBundle; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.ImageView; 


public class LivroUmActivity extends AppCompatActivity { 


    private ViewPager viewPager1; 
    private CustomSwipeAdapter1 adapter1; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_livro_um); 


     viewPager1 = findViewById(R.id.viewpager1_xml); 
     adapter1 = new CustomSwipeAdapter1(this); 

     viewPager1.setAdapter(adapter1); 



    } 

    @Override 
    protected void onDestroy() { 

     positionSaved = viewPager1.getCurrentItem(); 

     //Here I can save the position, just don't know how to set on the viewpager. 
     super.onDestroy(); 
    } 


} 

========================================================== 


import android.content.Context; 
import android.support.v4.view.ViewPager; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.View; 

import it.sephiroth.android.library.imagezoom.ImageViewTouch; 
import it.sephiroth.android.library.imagezoom.ImageViewTouchBase; 


public class ImageViewTouchViewPager extends ViewPager{ 

    private static final String TAG = "ImageViewTouchViewPager"; 
    public static final String VIEW_PAGER_OBJECT_TAG = "image#"; 

    private int previousPosition; 

    private OnPageSelectedListener onPageSelectedListener; 

    public ImageViewTouchViewPager(Context context) { 
     super(context); 
     init(); 
    } 

    public ImageViewTouchViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public void setOnPageSelectedListener(OnPageSelectedListener listener) { 
     onPageSelectedListener = listener; 
    } 

    @Override 
    protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { 
     if (v instanceof ImageViewTouch) { 
      return ((ImageViewTouch) v).canScroll(dx); 
     } else { 
      return super.canScroll(v, checkV, dx, x, y); 
     } 
    } 

    public interface OnPageSelectedListener { 

     public void onPageSelected(int position); 

    } 

    private void init() { 
     previousPosition = getCurrentItem(); 

     setOnPageChangeListener(new SimpleOnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 
       if (onPageSelectedListener != null) { 
        onPageSelectedListener.onPageSelected(position); 
       } 
      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 
       if (state == SCROLL_STATE_SETTLING && previousPosition != getCurrentItem()) { 
        try { 
         ImageViewTouch imageViewTouch = (ImageViewTouch) 
           findViewWithTag(VIEW_PAGER_OBJECT_TAG + getCurrentItem()); 
         if (imageViewTouch != null) { 
          imageViewTouch.zoomTo(1f, 300); 
         } 

         previousPosition = getCurrentItem(); 
        } catch (ClassCastException ex) { 
         Log.e(TAG, "This view pager should have only ImageViewTouch as a children.", ex); 
        } 
       } 
      } 
     }); 
    } 
} 

答えて

0

アプリが終了してもう一度開くので、ページ番号を永続的なストレージに保存する必要があります。単なる数値なので、SharedPreferenceを使うことができます。

「pageNumber」のようにSharedPreferenceにキーがあります。新しいページが読み込まれるたびに、ページ番号を「pageNumber」に保存します。この方法では、アプリケーションが閉じられる直前に最後のページ番号を保存することについて心配する必要はありません。

アプリをもう一度開いたら、「pageNumber」を確認して読み込みます。

+0

ありがとうございます。非常によく説明されています。 – djalmafreestyler

+0

@djalmafreestyler喜んで助けてください。これがあなたの問題を解決するならば、親切に答えをアップ/アップしてください。 – Henry

+0

アダプタまたはMainActivityでSharedPreferencesをどこで使用しますか? – djalmafreestyler

0

あなたが参照できます。

  • 使用共有設定をするときに近いアプリ
  • 開くアプリ、あなたは最後のページを取得し、最後のページでpostion設定できる場合には、本の最後のページを保存する:

viewPager.setCurrentItem(/ ** lastpageは共有設定から取得* /);

私はあなたの問題を助けることを願っています!

関連する問題