Как сохранить последний прочитанный пользователем номер страницы - PullRequest
0 голосов
/ 02 июля 2019

Я создаю приложение для Android, которое отображает определенный pdf через https://github.com/barteksc/AndroidPdfViewer с большим количеством страниц, и теперь я просто реализую метод повторного открытия PDF-файла с последней открытой страницы пользователя.

Я использую SharedPreferences для сохранения текущей страницы, а затем после перезагрузки приложения приложение снова откроет PDF-файл, на котором оставлен пользователь.

Вот мой метод общих настроек для сохранения и полученияданные

private void storepreferences () {
    PDFView pdfView = findViewById(R.id.pdfView);
    savedpage=pdfView.getCurrentPage();
    SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
    SharedPreferences.Editor editor = pref.edit();
    editor.putInt("key_name2", savedpage);
    editor.apply();
}
private void getpreferences () {
    SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
    pageNumber = pref.getInt("key_name2", 0);             // getting Integer
}

А потом я использую onCreate

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    storepreferences();
    getpreferences();

Также для теста я показываю

TextView txt = findViewById(R.id.textView2);
txt.setText(String.valueOf(pageNumber));

Но все же яполучить значение по умолчанию, что я делаю не так, может кто-нибудь сказать мне?

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Наконец-то я достиг этого, раньше я использовал (storepreferences) в OnCreate, но теперь я использую в BackPressed

@Override
public void onBackPressed() {
    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        storepreferences();
        super.onBackPressed();
    }
}

После этого я получаю сохраненные данные в OnCreate

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getpreferences();
}

Я использую описанную выше технику, потому что я подумал, что она на самом деле не хранит мои данные, потому что когда я использую Toast для отображения текущей страницы, она показывала именно тот номер страницы, где пользователь

public void pagestorebutton (){
        PDFView pdfView = findViewById(R.id.pdfView);
        savedpage = pdfView.getCurrentPage();
        Toast myToast = Toast.makeText(this,(String.valueOf(savedpage) ), Toast.LENGTH_SHORT);
        myToast.show();
        storepreferences();
    }

Ив onCreate я использую вышеуказанную функцию после нажатия плавающей кнопки

FloatingActionButton fab4 = findViewById(R.id.fab4);
        fab4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                pagestorebutton();
            }
        });

Мой метод достигает моей цели по правильному пути, или есть что-то еще, что нужно сделать ??

0 голосов
/ 02 июля 2019

В StorePreference, во-первых, попробуйте ввести этот код.

editor.commit()

, а затем

editor.apply().
...