152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project/*
252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project *
452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * you may not use this file except in compliance with the License.
652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * You may obtain a copy of the License at
752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project *
852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project *
1052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * See the License for the specific language governing permissions and
1452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * limitations under the License.
1552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project */
1652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
1752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectpackage com.example.android.apis.view;
1852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
19165ca04d0e05db466442be38110d4cc16e7f7618Dianne Hackbornimport com.example.android.apis.Shakespeare;
20165ca04d0e05db466442be38110d4cc16e7f7618Dianne Hackborn
2152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.app.ListActivity;
2252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.content.Context;
2352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.os.Bundle;
2452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.view.View;
2552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.view.ViewGroup;
2652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.widget.BaseAdapter;
2752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.widget.LinearLayout;
2852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.widget.TextView;
2952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
3052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
3152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project/**
3252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * A list view example where the data comes from a custom ListAdapter
3352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project */
3452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectpublic class List4 extends ListActivity {
3552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
3652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project    @Override
3752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project    public void onCreate(Bundle savedInstanceState) {
3852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        super.onCreate(savedInstanceState);
3952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
4052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        // Use our own list adapter
4152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        setListAdapter(new SpeechListAdapter(this));
4252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project    }
4352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
4452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
4552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project    /**
4652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project     * A sample ListAdapter that presents content from arrays of speeches and
4752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project     * text.
4852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project     *
4952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project     */
5052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project    private class SpeechListAdapter extends BaseAdapter {
5152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        public SpeechListAdapter(Context context) {
5252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            mContext = context;
5352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        }
5452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
5552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        /**
5652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         * The number of items in the list is determined by the number of speeches
5752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         * in our array.
5852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         *
5952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         * @see android.widget.ListAdapter#getCount()
6052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         */
6152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        public int getCount() {
62165ca04d0e05db466442be38110d4cc16e7f7618Dianne Hackborn            return Shakespeare.TITLES.length;
6352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        }
6452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
6552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        /**
6652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         * Since the data comes from an array, just returning the index is
6752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         * sufficent to get at the data. If we were using a more complex data
6852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         * structure, we would return whatever object represents one row in the
6952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         * list.
7052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         *
7152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         * @see android.widget.ListAdapter#getItem(int)
7252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         */
7352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        public Object getItem(int position) {
7452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            return position;
7552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        }
7652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
7752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        /**
7852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         * Use the array index as a unique id.
7952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         *
8052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         * @see android.widget.ListAdapter#getItemId(int)
8152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         */
8252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        public long getItemId(int position) {
8352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            return position;
8452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        }
8552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
8652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        /**
8752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         * Make a SpeechView to hold each row.
8852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         *
8952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         * @see android.widget.ListAdapter#getView(int, android.view.View,
9052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         *      android.view.ViewGroup)
9152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         */
9252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        public View getView(int position, View convertView, ViewGroup parent) {
9352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            SpeechView sv;
9452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            if (convertView == null) {
95165ca04d0e05db466442be38110d4cc16e7f7618Dianne Hackborn                sv = new SpeechView(mContext, Shakespeare.TITLES[position],
96165ca04d0e05db466442be38110d4cc16e7f7618Dianne Hackborn                        Shakespeare.DIALOGUE[position]);
9752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            } else {
9852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project                sv = (SpeechView) convertView;
99165ca04d0e05db466442be38110d4cc16e7f7618Dianne Hackborn                sv.setTitle(Shakespeare.TITLES[position]);
100165ca04d0e05db466442be38110d4cc16e7f7618Dianne Hackborn                sv.setDialogue(Shakespeare.DIALOGUE[position]);
10152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            }
10252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
10352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            return sv;
10452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        }
10552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
10652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        /**
10752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         * Remember our context so we can use it when constructing views.
10852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         */
10952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        private Context mContext;
11052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project    }
11152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
11252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project    /**
11352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project     * We will use a SpeechView to display each speech. It's just a LinearLayout
11452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project     * with two text fields.
11552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project     *
11652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project     */
11752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project    private class SpeechView extends LinearLayout {
11852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        public SpeechView(Context context, String title, String words) {
11952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            super(context);
12052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
12152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            this.setOrientation(VERTICAL);
12252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
12352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            // Here we build the child views in code. They could also have
12452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            // been specified in an XML file.
12552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
12652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            mTitle = new TextView(context);
12752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            mTitle.setText(title);
12852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            addView(mTitle, new LinearLayout.LayoutParams(
12974192eafec8408417114d77784cd35eda5df573cRomain Guy                    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
13052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
13152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            mDialogue = new TextView(context);
13252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            mDialogue.setText(words);
13352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            addView(mDialogue, new LinearLayout.LayoutParams(
13474192eafec8408417114d77784cd35eda5df573cRomain Guy                    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
13552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        }
13652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
13752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        /**
13852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         * Convenience method to set the title of a SpeechView
13952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         */
14052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        public void setTitle(String title) {
14152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            mTitle.setText(title);
14252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        }
14352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
14452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        /**
14552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         * Convenience method to set the dialogue of a SpeechView
14652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project         */
14752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        public void setDialogue(String words) {
14852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            mDialogue.setText(words);
14952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        }
15052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
15152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        private TextView mTitle;
15252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        private TextView mDialogue;
15352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project    }
15452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project}
155