Сохранить состояние RecyclerView после вызова AsyncTask при возврате из второго действия - PullRequest
0 голосов
/ 17 января 2019

Я новичок в разработке мобильных приложений и очень стремлюсь делать все правильно.

В этом сценарии я вызываю AsycTask, чтобы заполнить мой RecycleView данными в первом действии.

Когда элемент нажимается в RecycleView, я начинаю второе действие. Когда здесь нажимается кнопка «Назад», я возвращаюсь к первому действию. Именно в этот момент мне нужно, чтобы в RecycleView отображались те же данные, что и в самом начале.

Как мне этого добиться?

Код от MainActivity :

public class MainActivity extends AppCompatActivity {

    // Variables for the search input field, and results TextViews.

    private RecyclerView mRecyclerView;
    private WordListAdapter mAdapter;
    private LinkedList<String> mWordList = new LinkedList<>();

    /**
     * Initializes the activity.
     *
     * @param savedInstanceState The current state data
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Initialize all the view variables.

        mRecyclerView=(RecyclerView)findViewById(R.id.recyclerview);

        searchBooks(new View(this));
    }

    /**
     * Gets called when the user pushes the "Search Books" button
     *
     * @param view The view (Button) that was clicked.
     */
    public void searchBooks(View view) {
        // Get the search string from the input field.
        //String queryString = mBookInput.getText().toString();


        // Check the status of the network connection.
        ConnectivityManager connMgr = (ConnectivityManager)
                getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();

        // If the network is active and the search field is not empty, start a FetchBook AsyncTask.
        if (networkInfo != null && networkInfo.isConnected()) {
            new FetchBook(mWordList).execute("Titanic");

            try { Thread.sleep(5000); }
            catch (InterruptedException ex) { android.util.Log.d("YourApplicationName", ex.toString()); }

            // Create recycler view.
            mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
            // Create an adapter and supply the data to be displayed.
            mAdapter = new WordListAdapter(this, mWordList);
            // Connect the adapter with the recycler view.
            mRecyclerView.setAdapter(mAdapter);
            // Give the recycler view a default layout manager.
            mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        }
        // Otherwise update the TextView to tell the user there is no connection or no search term.
        else {

        }
    }
}

1 Ответ

0 голосов
/ 20 января 2019

Чтобы достичь этого, вы должны будете использовать onSaveInstanceState () и onRestoreInstanceState () внутри действия. Передайте соответствующие пары значений ключа в onSaveInstanceState (), затем получите значения в onRestoreInstanceState (); Проверьте ссылку ниже для подробного объяснения и кода: [https://stackoverflow.com/a/28262885/5985401][1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...