Skip to content

Most visited

Recently visited

navigation
ActionBarCompat-ShareActionProvider / src / com.example.android.actionbarcompat.shareactionprovider /

MainActivity.java

1
/*
2
 * Copyright (C) 2013 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.actionbarcompat.shareactionprovider;
18
 
19
import android.content.Intent;
20
import android.os.Bundle;
21
import android.support.v4.view.MenuItemCompat;
22
import android.support.v4.view.PagerAdapter;
23
import android.support.v4.view.ViewPager;
24
import android.support.v7.app.ActionBarActivity;
25
import android.support.v7.widget.ShareActionProvider;
26
import android.view.LayoutInflater;
27
import android.view.Menu;
28
import android.view.MenuItem;
29
import android.view.View;
30
import android.view.ViewGroup;
31
import android.widget.ImageView;
32
import android.widget.TextView;
33
 
34
import com.example.android.actionbarcompat.shareactionprovider.content.ContentItem;
35
 
36
import java.util.ArrayList;
37
 
38
/**
39
 * This sample shows you how a provide a {@link ShareActionProvider} with ActionBarCompat,
40
 * backwards compatible to API v7.
41
 * <p>
42
 * The sample contains a {@link ViewPager} which displays content of differing types: image and
43
 * text. When a new item is selected in the ViewPager, the ShareActionProvider is updated with
44
 * a share intent specific to that content.
45
 * <p>
46
 * This Activity extends from {@link ActionBarActivity}, which provides all of the function
47
 * necessary to display a compatible Action Bar on devices running Android v2.1+.
48
 */
49
public class MainActivity extends ActionBarActivity {
50
 
51
    // The items to be displayed in the ViewPager
52
    private final ArrayList<ContentItem> mItems = getSampleContent();
53
 
54
    // Keep reference to the ShareActionProvider from the menu
55
    private ShareActionProvider mShareActionProvider;
56
 
57
    @Override
58
    protected void onCreate(Bundle savedInstanceState) {
59
        super.onCreate(savedInstanceState);
60
 
61
        // Set content view (which contains a CheeseListFragment)
62
        setContentView(R.layout.sample_main);
63
 
64
        // Retrieve the ViewPager from the content view
65
        ViewPager vp = (ViewPager) findViewById(R.id.viewpager);
66
 
67
        // Set an OnPageChangeListener so we are notified when a new item is selected
68
        vp.setOnPageChangeListener(mOnPageChangeListener);
69
 
70
        // Finally set the adapter so the ViewPager can display items
71
        vp.setAdapter(mPagerAdapter);
72
    }
73
 
75
    @Override
76
    public boolean onCreateOptionsMenu(Menu menu) {
77
        // Inflate the menu resource
78
        getMenuInflater().inflate(R.menu.main_menu, menu);
79
 
80
        // Retrieve the share menu item
81
        MenuItem shareItem = menu.findItem(R.id.menu_share);
82
 
83
        // Now get the ShareActionProvider from the item
84
        mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);
85
 
86
        // Get the ViewPager's current item position and set its ShareIntent.
87
        int currentViewPagerItem = ((ViewPager) findViewById(R.id.viewpager)).getCurrentItem();
88
        setShareIntent(currentViewPagerItem);
89
 
90
        return super.onCreateOptionsMenu(menu);
91
    }
93
 
94
    /**
95
     * A PagerAdapter which instantiates views based on the ContentItem's content type.
96
     */
97
    private final PagerAdapter mPagerAdapter = new PagerAdapter() {
98
        LayoutInflater mInflater;
99
 
100
        @Override
101
        public int getCount() {
102
            return mItems.size();
103
        }
104
 
105
        @Override
106
        public boolean isViewFromObject(View view, Object o) {
107
            return view == o;
108
        }
109
 
110
        @Override
111
        public void destroyItem(ViewGroup container, int position, Object object) {
112
            // Just remove the view from the ViewPager
113
            container.removeView((View) object);
114
        }
115
 
116
        @Override
117
        public Object instantiateItem(ViewGroup container, int position) {
118
            // Ensure that the LayoutInflater is instantiated
119
            if (mInflater == null) {
120
                mInflater = LayoutInflater.from(MainActivity.this);
121
            }
122
 
123
            // Get the item for the requested position
124
            final ContentItem item = mItems.get(position);
125
 
126
            // The view we need to inflate changes based on the type of content
127
            switch (item.contentType) {
128
                case ContentItem.CONTENT_TYPE_TEXT: {
129
                    // Inflate item layout for text
130
                    TextView tv = (TextView) mInflater
131
                            .inflate(R.layout.item_text, container, false);
132
 
133
                    // Set text content using it's resource id
134
                    tv.setText(item.contentResourceId);
135
 
136
                    // Add the view to the ViewPager
137
                    container.addView(tv);
138
                    return tv;
139
                }
140
                case ContentItem.CONTENT_TYPE_IMAGE: {
141
                    // Inflate item layout for images
142
                    ImageView iv = (ImageView) mInflater
143
                            .inflate(R.layout.item_image, container, false);
144
 
145
                    // Load the image from it's content URI
146
                    iv.setImageURI(item.getContentUri());
147
 
148
                    // Add the view to the ViewPager
149
                    container.addView(iv);
150
                    return iv;
151
                }
152
            }
153
 
154
            return null;
155
        }
156
    };
157
 
158
    private void setShareIntent(int position) {
160
        if (mShareActionProvider != null) {
161
            // Get the currently selected item, and retrieve it's share intent
162
            ContentItem item = mItems.get(position);
163
            Intent shareIntent = item.getShareIntent(MainActivity.this);
164
 
165
            // Now update the ShareActionProvider with the new share intent
166
            mShareActionProvider.setShareIntent(shareIntent);
167
        }
169
    }
170
 
171
    /**
172
     * A OnPageChangeListener used to update the ShareActionProvider's share intent when a new item
173
     * is selected in the ViewPager.
174
     */
175
    private final ViewPager.OnPageChangeListener mOnPageChangeListener
176
            = new ViewPager.OnPageChangeListener() {
177
 
178
        @Override
179
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
180
            // NO-OP
181
        }
182
 
183
        @Override
184
        public void onPageSelected(int position) {
185
            setShareIntent(position);
186
        }
187
 
188
        @Override
189
        public void onPageScrollStateChanged(int state) {
190
            // NO-OP
191
        }
192
    };
193
 
194
    /**
195
     * @return An ArrayList of ContentItem's to be displayed in this sample
196
     */
197
    static ArrayList<ContentItem> getSampleContent() {
198
        ArrayList<ContentItem> items = new ArrayList<ContentItem>();
199
 
200
        items.add(new ContentItem(ContentItem.CONTENT_TYPE_IMAGE, "photo_1.jpg"));
201
        items.add(new ContentItem(ContentItem.CONTENT_TYPE_TEXT, R.string.quote_1));
202
        items.add(new ContentItem(ContentItem.CONTENT_TYPE_TEXT, R.string.quote_2));
203
        items.add(new ContentItem(ContentItem.CONTENT_TYPE_IMAGE, "photo_2.jpg"));
204
        items.add(new ContentItem(ContentItem.CONTENT_TYPE_TEXT, R.string.quote_3));
205
        items.add(new ContentItem(ContentItem.CONTENT_TYPE_IMAGE, "photo_3.jpg"));
206
 
207
        return items;
208
    }
209
 
210
}
This site uses cookies to store your preferences for site-specific language and display options.

Hooray!

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 Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.