1 /*
2  * Copyright (C) 2007 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.apis.view;
18 
19 import com.example.android.apis.Shakespeare;
20 
21 import android.app.ListActivity;
22 import android.content.Context;
23 import android.os.Bundle;
24 import android.view.View;
25 import android.view.ViewGroup;
26 import android.widget.BaseAdapter;
27 import android.widget.LinearLayout;
28 import android.widget.TextView;
29 
30 
31 /**
32  * A list view example where the data comes from a custom ListAdapter
33  */
34 public class List4 extends ListActivity {
35 
36     @Override
onCreate(Bundle savedInstanceState)37     public void onCreate(Bundle savedInstanceState) {
38         super.onCreate(savedInstanceState);
39 
40         // Use our own list adapter
41         setListAdapter(new SpeechListAdapter(this));
42     }
43 
44 
45     /**
46      * A sample ListAdapter that presents content from arrays of speeches and
47      * text.
48      *
49      */
50     private class SpeechListAdapter extends BaseAdapter {
SpeechListAdapter(Context context)51         public SpeechListAdapter(Context context) {
52             mContext = context;
53         }
54 
55         /**
56          * The number of items in the list is determined by the number of speeches
57          * in our array.
58          *
59          * @see android.widget.ListAdapter#getCount()
60          */
getCount()61         public int getCount() {
62             return Shakespeare.TITLES.length;
63         }
64 
65         /**
66          * Since the data comes from an array, just returning the index is
67          * sufficent to get at the data. If we were using a more complex data
68          * structure, we would return whatever object represents one row in the
69          * list.
70          *
71          * @see android.widget.ListAdapter#getItem(int)
72          */
getItem(int position)73         public Object getItem(int position) {
74             return position;
75         }
76 
77         /**
78          * Use the array index as a unique id.
79          *
80          * @see android.widget.ListAdapter#getItemId(int)
81          */
getItemId(int position)82         public long getItemId(int position) {
83             return position;
84         }
85 
86         /**
87          * Make a SpeechView to hold each row.
88          *
89          * @see android.widget.ListAdapter#getView(int, android.view.View,
90          *      android.view.ViewGroup)
91          */
getView(int position, View convertView, ViewGroup parent)92         public View getView(int position, View convertView, ViewGroup parent) {
93             SpeechView sv;
94             if (convertView == null) {
95                 sv = new SpeechView(mContext, Shakespeare.TITLES[position],
96                         Shakespeare.DIALOGUE[position]);
97             } else {
98                 sv = (SpeechView) convertView;
99                 sv.setTitle(Shakespeare.TITLES[position]);
100                 sv.setDialogue(Shakespeare.DIALOGUE[position]);
101             }
102 
103             return sv;
104         }
105 
106         /**
107          * Remember our context so we can use it when constructing views.
108          */
109         private Context mContext;
110     }
111 
112     /**
113      * We will use a SpeechView to display each speech. It's just a LinearLayout
114      * with two text fields.
115      *
116      */
117     private class SpeechView extends LinearLayout {
SpeechView(Context context, String title, String words)118         public SpeechView(Context context, String title, String words) {
119             super(context);
120 
121             this.setOrientation(VERTICAL);
122 
123             // Here we build the child views in code. They could also have
124             // been specified in an XML file.
125 
126             mTitle = new TextView(context);
127             mTitle.setText(title);
128             addView(mTitle, new LinearLayout.LayoutParams(
129                     LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
130 
131             mDialogue = new TextView(context);
132             mDialogue.setText(words);
133             addView(mDialogue, new LinearLayout.LayoutParams(
134                     LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
135         }
136 
137         /**
138          * Convenience method to set the title of a SpeechView
139          */
setTitle(String title)140         public void setTitle(String title) {
141             mTitle.setText(title);
142         }
143 
144         /**
145          * Convenience method to set the dialogue of a SpeechView
146          */
setDialogue(String words)147         public void setDialogue(String words) {
148             mDialogue.setText(words);
149         }
150 
151         private TextView mTitle;
152         private TextView mDialogue;
153     }
154 }
155