Skip to content

Most visited

Recently visited

navigation
RecyclerView / src / com.example.android.recyclerview /

RecyclerViewFragment.java

1
/*
2
* Copyright (C) 2014 The Android Open Source Project
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
*      http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
16
 
17
package com.example.android.recyclerview;
18
 
19
import android.os.Bundle;
20
import android.support.v4.app.Fragment;
21
import android.support.v7.widget.GridLayoutManager;
22
import android.support.v7.widget.LinearLayoutManager;
23
import android.support.v7.widget.RecyclerView;
24
import android.view.LayoutInflater;
25
import android.view.View;
26
import android.view.ViewGroup;
27
import android.widget.RadioButton;
28
 
29
/**
30
 * Demonstrates the use of {@link RecyclerView} with a {@link LinearLayoutManager} and a
31
 * {@link GridLayoutManager}.
32
 */
33
public class RecyclerViewFragment extends Fragment {
34
 
35
    private static final String TAG = "RecyclerViewFragment";
36
    private static final String KEY_LAYOUT_MANAGER = "layoutManager";
37
    private static final int SPAN_COUNT = 2;
38
    private static final int DATASET_COUNT = 60;
39
 
40
    private enum LayoutManagerType {
41
        GRID_LAYOUT_MANAGER,
42
        LINEAR_LAYOUT_MANAGER
43
    }
44
 
45
    protected LayoutManagerType mCurrentLayoutManagerType;
46
 
47
    protected RadioButton mLinearLayoutRadioButton;
48
    protected RadioButton mGridLayoutRadioButton;
49
 
50
    protected RecyclerView mRecyclerView;
51
    protected CustomAdapter mAdapter;
52
    protected RecyclerView.LayoutManager mLayoutManager;
53
    protected String[] mDataset;
54
 
55
    @Override
56
    public void onCreate(Bundle savedInstanceState) {
57
        super.onCreate(savedInstanceState);
58
 
59
        // Initialize dataset, this data would usually come from a local content provider or
60
        // remote server.
61
        initDataset();
62
    }
63
 
64
    @Override
65
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
66
            Bundle savedInstanceState) {
67
        View rootView = inflater.inflate(R.layout.recycler_view_frag, container, false);
68
        rootView.setTag(TAG);
69
 
71
        mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerView);
72
 
73
        // LinearLayoutManager is used here, this will layout the elements in a similar fashion
74
        // to the way ListView would layout elements. The RecyclerView.LayoutManager defines how
75
        // elements are laid out.
76
        mLayoutManager = new LinearLayoutManager(getActivity());
77
 
78
        mCurrentLayoutManagerType = LayoutManagerType.LINEAR_LAYOUT_MANAGER;
79
 
80
        if (savedInstanceState != null) {
81
            // Restore saved layout manager type.
82
            mCurrentLayoutManagerType = (LayoutManagerType) savedInstanceState
83
                    .getSerializable(KEY_LAYOUT_MANAGER);
84
        }
85
        setRecyclerViewLayoutManager(mCurrentLayoutManagerType);
86
 
87
        mAdapter = new CustomAdapter(mDataset);
88
        // Set CustomAdapter as the adapter for RecyclerView.
89
        mRecyclerView.setAdapter(mAdapter);
91
 
92
        mLinearLayoutRadioButton = (RadioButton) rootView.findViewById(R.id.linear_layout_rb);
93
        mLinearLayoutRadioButton.setOnClickListener(new View.OnClickListener() {
94
            @Override
95
            public void onClick(View v) {
96
                setRecyclerViewLayoutManager(LayoutManagerType.LINEAR_LAYOUT_MANAGER);
97
            }
98
        });
99
 
100
        mGridLayoutRadioButton = (RadioButton) rootView.findViewById(R.id.grid_layout_rb);
101
        mGridLayoutRadioButton.setOnClickListener(new View.OnClickListener() {
102
            @Override
103
            public void onClick(View v) {
104
                setRecyclerViewLayoutManager(LayoutManagerType.GRID_LAYOUT_MANAGER);
105
            }
106
        });
107
 
108
        return rootView;
109
    }
110
 
111
    /**
112
     * Set RecyclerView's LayoutManager to the one given.
113
     *
114
     * @param layoutManagerType Type of layout manager to switch to.
115
     */
116
    public void setRecyclerViewLayoutManager(LayoutManagerType layoutManagerType) {
117
        int scrollPosition = 0;
118
 
119
        // If a layout manager has already been set, get current scroll position.
120
        if (mRecyclerView.getLayoutManager() != null) {
121
            scrollPosition = ((LinearLayoutManager) mRecyclerView.getLayoutManager())
122
                    .findFirstCompletelyVisibleItemPosition();
123
        }
124
 
125
        switch (layoutManagerType) {
126
            case GRID_LAYOUT_MANAGER:
127
                mLayoutManager = new GridLayoutManager(getActivity(), SPAN_COUNT);
128
                mCurrentLayoutManagerType = LayoutManagerType.GRID_LAYOUT_MANAGER;
129
                break;
130
            case LINEAR_LAYOUT_MANAGER:
131
                mLayoutManager = new LinearLayoutManager(getActivity());
132
                mCurrentLayoutManagerType = LayoutManagerType.LINEAR_LAYOUT_MANAGER;
133
                break;
134
            default:
135
                mLayoutManager = new LinearLayoutManager(getActivity());
136
                mCurrentLayoutManagerType = LayoutManagerType.LINEAR_LAYOUT_MANAGER;
137
        }
138
 
139
        mRecyclerView.setLayoutManager(mLayoutManager);
140
        mRecyclerView.scrollToPosition(scrollPosition);
141
    }
142
 
143
    @Override
144
    public void onSaveInstanceState(Bundle savedInstanceState) {
145
        // Save currently selected layout manager.
146
        savedInstanceState.putSerializable(KEY_LAYOUT_MANAGER, mCurrentLayoutManagerType);
147
        super.onSaveInstanceState(savedInstanceState);
148
    }
149
 
150
    /**
151
     * Generates Strings for RecyclerView's adapter. This data would usually come
152
     * from a local content provider or remote server.
153
     */
154
    private void initDataset() {
155
        mDataset = new String[DATASET_COUNT];
156
        for (int i = 0; i < DATASET_COUNT; i++) {
157
            mDataset[i] = "This is element #" + i;
158
        }
159
    }
160
}
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read