Home | History | Annotate | Download | only in view
      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 android.app.ListActivity;
     20 import android.content.Context;
     21 import android.os.Bundle;
     22 import android.view.View;
     23 import android.view.ViewGroup;
     24 import android.widget.BaseAdapter;
     25 import android.widget.LinearLayout;
     26 import android.widget.ListView;
     27 import android.widget.TextView;
     28 
     29 
     30 /**
     31  * A list view example where the
     32  * data comes from a custom
     33  * ListAdapter
     34  */
     35 public class List6 extends ListActivity
     36 {
     37 
     38     @Override
     39     public void onCreate(Bundle savedInstanceState)
     40     {
     41         super.onCreate(savedInstanceState);
     42 
     43         // Use our own list adapter
     44         setListAdapter(new SpeechListAdapter(this));
     45     }
     46 
     47 
     48     @Override
     49     protected void onListItemClick(ListView l, View v, int position, long id)
     50     {
     51        ((SpeechListAdapter)getListAdapter()).toggle(position);
     52     }
     53 
     54     /**
     55      * A sample ListAdapter that presents content
     56      * from arrays of speeches and text.
     57      *
     58      */
     59     private class SpeechListAdapter extends BaseAdapter {
     60         public SpeechListAdapter(Context context)
     61         {
     62             mContext = context;
     63         }
     64 
     65 
     66         /**
     67          * The number of items in the list is determined by the number of speeches
     68          * in our array.
     69          *
     70          * @see android.widget.ListAdapter#getCount()
     71          */
     72         public int getCount() {
     73             return mTitles.length;
     74         }
     75 
     76         /**
     77          * Since the data comes from an array, just returning
     78          * the index is sufficent to get at the data. If we
     79          * were using a more complex data structure, we
     80          * would return whatever object represents one
     81          * row in the list.
     82          *
     83          * @see android.widget.ListAdapter#getItem(int)
     84          */
     85         public Object getItem(int position) {
     86             return position;
     87         }
     88 
     89         /**
     90          * Use the array index as a unique id.
     91          * @see android.widget.ListAdapter#getItemId(int)
     92          */
     93         public long getItemId(int position) {
     94             return position;
     95         }
     96 
     97         /**
     98          * Make a SpeechView to hold each row.
     99          * @see android.widget.ListAdapter#getView(int, android.view.View, android.view.ViewGroup)
    100          */
    101         public View getView(int position, View convertView, ViewGroup parent) {
    102             SpeechView sv;
    103             if (convertView == null) {
    104                 sv = new SpeechView(mContext, mTitles[position], mDialogue[position], mExpanded[position]);
    105             } else {
    106                 sv = (SpeechView)convertView;
    107                 sv.setTitle(mTitles[position]);
    108                 sv.setDialogue(mDialogue[position]);
    109                 sv.setExpanded(mExpanded[position]);
    110             }
    111 
    112             return sv;
    113         }
    114 
    115         public void toggle(int position) {
    116             mExpanded[position] = !mExpanded[position];
    117             notifyDataSetChanged();
    118         }
    119 
    120         /**
    121          * Remember our context so we can use it when constructing views.
    122          */
    123         private Context mContext;
    124 
    125         /**
    126          * Our data, part 1.
    127          */
    128         private String[] mTitles =
    129         {
    130                 "Henry IV (1)",
    131                 "Henry V",
    132                 "Henry VIII",
    133                 "Richard II",
    134                 "Richard III",
    135                 "Merchant of Venice",
    136                 "Othello",
    137                 "King Lear"
    138         };
    139 
    140         /**
    141          * Our data, part 2.
    142          */
    143         private String[] mDialogue =
    144         {
    145                 "So shaken as we are, so wan with care," +
    146                 "Find we a time for frighted peace to pant," +
    147                 "And breathe short-winded accents of new broils" +
    148                 "To be commenced in strands afar remote." +
    149                 "No more the thirsty entrance of this soil" +
    150                 "Shall daub her lips with her own children's blood;" +
    151                 "Nor more shall trenching war channel her fields," +
    152                 "Nor bruise her flowerets with the armed hoofs" +
    153                 "Of hostile paces: those opposed eyes," +
    154                 "Which, like the meteors of a troubled heaven," +
    155                 "All of one nature, of one substance bred," +
    156                 "Did lately meet in the intestine shock" +
    157                 "And furious close of civil butchery" +
    158                 "Shall now, in mutual well-beseeming ranks," +
    159                 "March all one way and be no more opposed" +
    160                 "Against acquaintance, kindred and allies:" +
    161                 "The edge of war, like an ill-sheathed knife," +
    162                 "No more shall cut his master. Therefore, friends," +
    163                 "As far as to the sepulchre of Christ," +
    164                 "Whose soldier now, under whose blessed cross" +
    165                 "We are impressed and engaged to fight," +
    166                 "Forthwith a power of English shall we levy;" +
    167                 "Whose arms were moulded in their mothers' womb" +
    168                 "To chase these pagans in those holy fields" +
    169                 "Over whose acres walk'd those blessed feet" +
    170                 "Which fourteen hundred years ago were nail'd" +
    171                 "For our advantage on the bitter cross." +
    172                 "But this our purpose now is twelve month old," +
    173                 "And bootless 'tis to tell you we will go:" +
    174                 "Therefore we meet not now. Then let me hear" +
    175                 "Of you, my gentle cousin Westmoreland," +
    176                 "What yesternight our council did decree" +
    177                 "In forwarding this dear expedience.",
    178 
    179                 "Hear him but reason in divinity," +
    180                 "And all-admiring with an inward wish" +
    181                 "You would desire the king were made a prelate:" +
    182                 "Hear him debate of commonwealth affairs," +
    183                 "You would say it hath been all in all his study:" +
    184                 "List his discourse of war, and you shall hear" +
    185                 "A fearful battle render'd you in music:" +
    186                 "Turn him to any cause of policy," +
    187                 "The Gordian knot of it he will unloose," +
    188                 "Familiar as his garter: that, when he speaks," +
    189                 "The air, a charter'd libertine, is still," +
    190                 "And the mute wonder lurketh in men's ears," +
    191                 "To steal his sweet and honey'd sentences;" +
    192                 "So that the art and practic part of life" +
    193                 "Must be the mistress to this theoric:" +
    194                 "Which is a wonder how his grace should glean it," +
    195                 "Since his addiction was to courses vain," +
    196                 "His companies unletter'd, rude and shallow," +
    197                 "His hours fill'd up with riots, banquets, sports," +
    198                 "And never noted in him any study," +
    199                 "Any retirement, any sequestration" +
    200                 "From open haunts and popularity.",
    201 
    202                 "I come no more to make you laugh: things now," +
    203                 "That bear a weighty and a serious brow," +
    204                 "Sad, high, and working, full of state and woe," +
    205                 "Such noble scenes as draw the eye to flow," +
    206                 "We now present. Those that can pity, here" +
    207                 "May, if they think it well, let fall a tear;" +
    208                 "The subject will deserve it. Such as give" +
    209                 "Their money out of hope they may believe," +
    210                 "May here find truth too. Those that come to see" +
    211                 "Only a show or two, and so agree" +
    212                 "The play may pass, if they be still and willing," +
    213                 "I'll undertake may see away their shilling" +
    214                 "Richly in two short hours. Only they" +
    215                 "That come to hear a merry bawdy play," +
    216                 "A noise of targets, or to see a fellow" +
    217                 "In a long motley coat guarded with yellow," +
    218                 "Will be deceived; for, gentle hearers, know," +
    219                 "To rank our chosen truth with such a show" +
    220                 "As fool and fight is, beside forfeiting" +
    221                 "Our own brains, and the opinion that we bring," +
    222                 "To make that only true we now intend," +
    223                 "Will leave us never an understanding friend." +
    224                 "Therefore, for goodness' sake, and as you are known" +
    225                 "The first and happiest hearers of the town," +
    226                 "Be sad, as we would make ye: think ye see" +
    227                 "The very persons of our noble story" +
    228                 "As they were living; think you see them great," +
    229                 "And follow'd with the general throng and sweat" +
    230                 "Of thousand friends; then in a moment, see" +
    231                 "How soon this mightiness meets misery:" +
    232                 "And, if you can be merry then, I'll say" +
    233                 "A man may weep upon his wedding-day.",
    234 
    235                 "First, heaven be the record to my speech!" +
    236                 "In the devotion of a subject's love," +
    237                 "Tendering the precious safety of my prince," +
    238                 "And free from other misbegotten hate," +
    239                 "Come I appellant to this princely presence." +
    240                 "Now, Thomas Mowbray, do I turn to thee," +
    241                 "And mark my greeting well; for what I speak" +
    242                 "My body shall make good upon this earth," +
    243                 "Or my divine soul answer it in heaven." +
    244                 "Thou art a traitor and a miscreant," +
    245                 "Too good to be so and too bad to live," +
    246                 "Since the more fair and crystal is the sky," +
    247                 "The uglier seem the clouds that in it fly." +
    248                 "Once more, the more to aggravate the note," +
    249                 "With a foul traitor's name stuff I thy throat;" +
    250                 "And wish, so please my sovereign, ere I move," +
    251                 "What my tongue speaks my right drawn sword may prove.",
    252 
    253                 "Now is the winter of our discontent" +
    254                 "Made glorious summer by this sun of York;" +
    255                 "And all the clouds that lour'd upon our house" +
    256                 "In the deep bosom of the ocean buried." +
    257                 "Now are our brows bound with victorious wreaths;" +
    258                 "Our bruised arms hung up for monuments;" +
    259                 "Our stern alarums changed to merry meetings," +
    260                 "Our dreadful marches to delightful measures." +
    261                 "Grim-visaged war hath smooth'd his wrinkled front;" +
    262                 "And now, instead of mounting barded steeds" +
    263                 "To fright the souls of fearful adversaries," +
    264                 "He capers nimbly in a lady's chamber" +
    265                 "To the lascivious pleasing of a lute." +
    266                 "But I, that am not shaped for sportive tricks," +
    267                 "Nor made to court an amorous looking-glass;" +
    268                 "I, that am rudely stamp'd, and want love's majesty" +
    269                 "To strut before a wanton ambling nymph;" +
    270                 "I, that am curtail'd of this fair proportion," +
    271                 "Cheated of feature by dissembling nature," +
    272                 "Deformed, unfinish'd, sent before my time" +
    273                 "Into this breathing world, scarce half made up," +
    274                 "And that so lamely and unfashionable" +
    275                 "That dogs bark at me as I halt by them;" +
    276                 "Why, I, in this weak piping time of peace," +
    277                 "Have no delight to pass away the time," +
    278                 "Unless to spy my shadow in the sun" +
    279                 "And descant on mine own deformity:" +
    280                 "And therefore, since I cannot prove a lover," +
    281                 "To entertain these fair well-spoken days," +
    282                 "I am determined to prove a villain" +
    283                 "And hate the idle pleasures of these days." +
    284                 "Plots have I laid, inductions dangerous," +
    285                 "By drunken prophecies, libels and dreams," +
    286                 "To set my brother Clarence and the king" +
    287                 "In deadly hate the one against the other:" +
    288                 "And if King Edward be as true and just" +
    289                 "As I am subtle, false and treacherous," +
    290                 "This day should Clarence closely be mew'd up," +
    291                 "About a prophecy, which says that 'G'" +
    292                 "Of Edward's heirs the murderer shall be." +
    293                 "Dive, thoughts, down to my soul: here" +
    294                 "Clarence comes.",
    295 
    296                 "To bait fish withal: if it will feed nothing else," +
    297                 "it will feed my revenge. He hath disgraced me, and" +
    298                 "hindered me half a million; laughed at my losses," +
    299                 "mocked at my gains, scorned my nation, thwarted my" +
    300                 "bargains, cooled my friends, heated mine" +
    301                 "enemies; and what's his reason? I am a Jew. Hath" +
    302                 "not a Jew eyes? hath not a Jew hands, organs," +
    303                 "dimensions, senses, affections, passions? fed with" +
    304                 "the same food, hurt with the same weapons, subject" +
    305                 "to the same diseases, healed by the same means," +
    306                 "warmed and cooled by the same winter and summer, as" +
    307                 "a Christian is? If you prick us, do we not bleed?" +
    308                 "if you tickle us, do we not laugh? if you poison" +
    309                 "us, do we not die? and if you wrong us, shall we not" +
    310                 "revenge? If we are like you in the rest, we will" +
    311                 "resemble you in that. If a Jew wrong a Christian," +
    312                 "what is his humility? Revenge. If a Christian" +
    313                 "wrong a Jew, what should his sufferance be by" +
    314                 "Christian example? Why, revenge. The villany you" +
    315                 "teach me, I will execute, and it shall go hard but I" +
    316                 "will better the instruction.",
    317 
    318                 "Virtue! a fig! 'tis in ourselves that we are thus" +
    319                 "or thus. Our bodies are our gardens, to the which" +
    320                 "our wills are gardeners: so that if we will plant" +
    321                 "nettles, or sow lettuce, set hyssop and weed up" +
    322                 "thyme, supply it with one gender of herbs, or" +
    323                 "distract it with many, either to have it sterile" +
    324                 "with idleness, or manured with industry, why, the" +
    325                 "power and corrigible authority of this lies in our" +
    326                 "wills. If the balance of our lives had not one" +
    327                 "scale of reason to poise another of sensuality, the" +
    328                 "blood and baseness of our natures would conduct us" +
    329                 "to most preposterous conclusions: but we have" +
    330                 "reason to cool our raging motions, our carnal" +
    331                 "stings, our unbitted lusts, whereof I take this that" +
    332                 "you call love to be a sect or scion.",
    333 
    334                 "Blow, winds, and crack your cheeks! rage! blow!" +
    335                 "You cataracts and hurricanoes, spout" +
    336                 "Till you have drench'd our steeples, drown'd the cocks!" +
    337                 "You sulphurous and thought-executing fires," +
    338                 "Vaunt-couriers to oak-cleaving thunderbolts," +
    339                 "Singe my white head! And thou, all-shaking thunder," +
    340                 "Smite flat the thick rotundity o' the world!" +
    341                 "Crack nature's moulds, an germens spill at once," +
    342                 "That make ingrateful man!"
    343         };
    344 
    345         /**
    346          * Our data, part 3.
    347          */
    348         private boolean[] mExpanded =
    349         {
    350                 false,
    351                 false,
    352                 false,
    353                 false,
    354                 false,
    355                 false,
    356                 false,
    357                 false
    358         };
    359     }
    360 
    361     /**
    362      * We will use a SpeechView to display each speech. It's just a LinearLayout
    363      * with two text fields.
    364      *
    365      */
    366     private class SpeechView extends LinearLayout {
    367         public SpeechView(Context context, String title, String dialogue, boolean expanded) {
    368             super(context);
    369 
    370             this.setOrientation(VERTICAL);
    371 
    372             // Here we build the child views in code. They could also have
    373             // been specified in an XML file.
    374 
    375             mTitle = new TextView(context);
    376             mTitle.setText(title);
    377             addView(mTitle, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    378 
    379             mDialogue = new TextView(context);
    380             mDialogue.setText(dialogue);
    381             addView(mDialogue, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    382 
    383             mDialogue.setVisibility(expanded ? VISIBLE : GONE);
    384         }
    385 
    386         /**
    387          * Convenience method to set the title of a SpeechView
    388          */
    389         public void setTitle(String title) {
    390             mTitle.setText(title);
    391         }
    392 
    393         /**
    394          * Convenience method to set the dialogue of a SpeechView
    395          */
    396         public void setDialogue(String words) {
    397             mDialogue.setText(words);
    398         }
    399 
    400         /**
    401          * Convenience method to expand or hide the dialogue
    402          */
    403         public void setExpanded(boolean expanded) {
    404             mDialogue.setVisibility(expanded ? VISIBLE : GONE);
    405         }
    406 
    407         private TextView mTitle;
    408         private TextView mDialogue;
    409     }
    410 }
    411