`
coolerbaosi
  • 浏览: 725518 次
文章分类
社区版块
存档分类
最新评论

Android第十二站 众多豪华控件 列表应用

 
阅读更多

目录

4.18 动态文字排版

4.19 在Activity里显示列表

4.20 以动态列表配置选项

ListActivityMenu整合技巧

4.18 动态文字排版

范例说明

提到GridView这个Widget,就会令人联想到AdapterGridView是一个类似于“表格化”的二维排版配置View,当GridView里的元素多到画面放不下时,就会出现scrolling的效果,一般在GridView里的元素称为Item,要将文字作为Item放入GridView,就要借助ArrayAdapter对象。

这个范例将示范如何利用GridView来动态排版文字,事前在Layoutmain.xml)当中配置一个GridView WidgetmyGridView1),并设计两个按钮,作为动态放入GridView的开关。其中一个按钮设置GridView为两列样式,并放入4Item;另一个按钮则动态指定为3列样式,并放入9Item,以此达到利用GridView动态进行文字排版的效果。当要以二维表格显示未知元素(Item)个数的文字时,利用此法就可以轻松完成排版,且在GridView上也同样具有OnItemClickListener方法,可以捕捉UserGridView上单击的Item是什么。


范例程序

src/irdc.ex04_18/EX04_18.java

引用Android.widget.GridView后,便可在Activity当中声明GridView对象,利用findViewById()找到事先配放在Layoutmain.xml)上的GridView WidgetR.id.myGridView1)。

程序中有mButton01mButton02两个按钮对象,各自设置其OnClickListener,在按钮事件中处理要配置GridView的方法。GridViewsetNumColumns方法为设置其字段数量,为了方便配置GridView,使用了ArrarAdapterAndroid.widget.ArrayAdapter默认构造需要3个参数,并将初始化的ArrayAdapter对象aryAdapter1以调用GridView. setAdapter()的方式,将String类型的Item放入GridViewmGridView01)当中。

/* import程序略 */

  1. public class EX04_18 extends Activity
  2. {
  3. private TextView mTextView01;
  4. private Button mButton01,mButton02;
  5. private GridView mGridView01;
  6. private String[] mGames1,mGames2;
  7. private ArrayAdapter<String> aryAdapter1;
  8. /** Called when the activity is first created. */
  9. @Override
  10. public void onCreate(Bundle savedInstanceState)
  11. {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.main);
  14. /* 4个字符串数组 */
  15. mGames1 = new String[]
  16. {
  17. getResources().getString(R.string.str_list1),
  18. getResources().getString(R.string.str_list2),
  19. getResources().getString(R.string.str_list3),
  20. getResources().getString(R.string.str_list4)
  21. };
  22. /* 9个字符串数组 */
  23. mGames2 = new String[]
  24. {
  25. getResources().getString(R.string.str_list1),
  26. getResources().getString(R.string.str_list2),
  27. getResources().getString(R.string.str_list3),
  28. getResources().getString(R.string.str_list4),
  29. getResources().getString(R.string.str_list1),
  30. getResources().getString(R.string.str_list2),
  31. getResources().getString(R.string.str_list3),
  32. getResources().getString(R.string.str_list4),
  33. getResources().getString(R.string.str_list1)
  34. };
  35. mButton01 = (Button)findViewById(R.id.myButton1);
  36. mButton02 = (Button)findViewById(R.id.myButton2);
  37. mGridView01 = (GridView)findViewById(R.id.myGridView1);
  38. mTextView01 = (TextView)findViewById(R.id.myTextView1);
  39. mButton01.setOnClickListener(new Button.OnClickListener()
  40. {
  41. @Override
  42. public void onClick(View v)
  43. {
  44. // TODO Auto-generated method stub
  45. /* 4个元素,以2列方式显示(2x2) */
  46. mGridView01.setNumColumns(2);
  47. aryAdapter1 = new ArrayAdapter<String>
  48. (EX04_18.this, R.layout.simple_list_item_1_small, mGames1);
  49. mGridView01.setAdapter(aryAdapter1);
  50. //mGridView01.setScrollBarStyle(DEFAULT_KEYS_DIALER);
  51. mGridView01.setSelection(2);
  52. mGridView01.refreshDrawableState();
  53. }
  54. });
  55. mButton02.setOnClickListener(new Button.OnClickListener()
  56. {
  57. @Override
  58. public void onClick(View v)
  59. {
  60. // TODO Auto-generated method stub
  61. /* 9个元素,以3列方式显示(3x3) */
  62. mGridView01.setNumColumns(3);
  63. aryAdapter1 = new ArrayAdapter<String>
  64. (EX04_18.this, R.layout.simple_list_item_1_small, mGames2);
  65. mGridView01.setAdapter(aryAdapter1);
  66. }
  67. });
  68. mGridView01.setOnItemClickListener
  69. (new GridView.OnItemClickListener()
  70. {
  71. @Override
  72. public void onItemClick(AdapterView<?> parent,
  73. View v, int position, long arg3)
  74. {
  75. // TODO Auto-generated method stub
  76. /* 判断Adapter里的元素个数,判断被单击的是第几个元素名称 */
  77. switch(aryAdapter1.getCount())
  78. {
  79. case 4:
  80. /* positionGridView里的元素索引值 */
  81. mTextView01.setText(mGames1[position]);
  82. break;
  83. case 9:
  84. mTextView01.setText(mGames2[position]);
  85. break;
  86. }
  87. }
  88. });
  89. }
  90. }

res/layout/simple_list_item_1_small.xml

放在layout下面的simple_list_item_1_small.xml,是用来配置ArrayAdapter第二个参数text- ViewResourceId,必须为TextView进行配置,若需要更改放入Item文字的模式,可以通过这个文件来进行文字大小、模式的属性设置,而一旦放入ArrayAdapter,这个配置就会立即生效;当然也可以设置许多的layout xml,并提供给不同的GridView来使用,以此让每一个GridView都有不同的风貌。

<?xml version="1.0" encoding="utf-8"?>

<TextView

xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/myCheckedTextView1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textColor="@drawable/blue"

android:textSize="12sp"

android:textAppearance="?android:attr/textAppearanceLarge"

android:gravity="center_vertical"

android:paddingLeft="6dip"

android:minHeight="?android:attr/listPreferredItemHeight"

/>

扩展学习

既然谈到了ArrayAdapter,先来看看这个类的原型。

android.widget.ArrayAdapter.ArrayAdapter(Context context, int textViewResourceId, String[] objects)

android.widget.ArrayAdapter.ArrayAdapter需要传递3个参数才能构造,分别说明如表4-2所示。

4-2 需传入的3个参数

Context context

现有程序的context

int textViewResourceId

要使用的Layout文件Resource ID,当中必须包含一个TextView

String[] objects

要放入的字符串数组

GridViewWidget XML属性名称及GridView对象的方法对应如表4-3所示。

4-3 XML属性名称及对应的对象方法

XML属性名称

对应的对象方法

android:columnWidth

setColumnWidth(int)

android:gravity

setGravity(int)

android:horizontalSpacing

setHorizontalSpacing(int)

android:numColumns

setNumColumns(int)

android:stretchMode

setStretchMode(int)

android:verticalSpacing

setVerticalSpacing(int)

最后来看看刚才构造ArrayAdapter时所使用的“simple_list_item_1_small.xml”,这个文件是提供给GridViewLayout配置,范例程序共使用了textColortextSizetextAppearance等属性,但其实只要利用以下的XML基本元素,就可以满足GridView可使用的ArrayAdapter TextView

<?xml version="1.0" encoding="utf-8"?>

<TextView

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

4.19 在Activity里显示列表

4.18 动态文字排版

范例说明

提到GridView这个Widget,就会令人联想到AdapterGridView是一个类似于“表格化”的二维排版配置View,当GridView里的元素多到画面放不下时,就会出现scrolling的效果,一般在GridView里的元素称为Item,要将文字作为Item放入GridView,就要借助ArrayAdapter对象。

这个范例将示范如何利用GridView来动态排版文字,事前在Layoutmain.xml)当中配置一个GridView WidgetmyGridView1),并设计两个按钮,作为动态放入GridView的开关。其中一个按钮设置GridView为两列样式,并放入4Item;另一个按钮则动态指定为3列样式,并放入9Item,以此达到利用GridView动态进行文字排版的效果。当要以二维表格显示未知元素(Item)个数的文字时,利用此法就可以轻松完成排版,且在GridView上也同样具有OnItemClickListener方法,可以捕捉UserGridView上单击的Item是什么。


范例程序

src/irdc.ex04_18/EX04_18.java

引用Android.widget.GridView后,便可在Activity当中声明GridView对象,利用findViewById()找到事先配放在Layoutmain.xml)上的GridView WidgetR.id.myGridView1)。

程序中有mButton01mButton02两个按钮对象,各自设置其OnClickListener,在按钮事件中处理要配置GridView的方法。GridViewsetNumColumns方法为设置其字段数量,为了方便配置GridView,使用了ArrarAdapterAndroid.widget.ArrayAdapter默认构造需要3个参数,并将初始化的ArrayAdapter对象aryAdapter1以调用GridView. setAdapter()的方式,将String类型的Item放入GridViewmGridView01)当中。

/* import程序略 */

  1. public class EX04_18 extends Activity
  2. {
  3. private TextView mTextView01;
  4. private Button mButton01,mButton02;
  5. private GridView mGridView01;
  6. private String[] mGames1,mGames2;
  7. private ArrayAdapter<String> aryAdapter1;
  8. /** Called when the activity is first created. */
  9. @Override
  10. public void onCreate(Bundle savedInstanceState)
  11. {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.main);
  14. /* 4个字符串数组 */
  15. mGames1 = new String[]
  16. {
  17. getResources().getString(R.string.str_list1),
  18. getResources().getString(R.string.str_list2),
  19. getResources().getString(R.string.str_list3),
  20. getResources().getString(R.string.str_list4)
  21. };
  22. /* 9个字符串数组 */
  23. mGames2 = new String[]
  24. {
  25. getResources().getString(R.string.str_list1),
  26. getResources().getString(R.string.str_list2),
  27. getResources().getString(R.string.str_list3),
  28. getResources().getString(R.string.str_list4),
  29. getResources().getString(R.string.str_list1),
  30. getResources().getString(R.string.str_list2),
  31. getResources().getString(R.string.str_list3),
  32. getResources().getString(R.string.str_list4),
  33. getResources().getString(R.string.str_list1)
  34. };
  35. mButton01 = (Button)findViewById(R.id.myButton1);
  36. mButton02 = (Button)findViewById(R.id.myButton2);
  37. mGridView01 = (GridView)findViewById(R.id.myGridView1);
  38. mTextView01 = (TextView)findViewById(R.id.myTextView1);
  39. mButton01.setOnClickListener(new Button.OnClickListener()
  40. {
  41. @Override
  42. public void onClick(View v)
  43. {
  44. // TODO Auto-generated method stub
  45. /* 4个元素,以2列方式显示(2x2) */
  46. mGridView01.setNumColumns(2);
  47. aryAdapter1 = new ArrayAdapter<String>
  48. (EX04_18.this, R.layout.simple_list_item_1_small, mGames1);
  49. mGridView01.setAdapter(aryAdapter1);
  50. //mGridView01.setScrollBarStyle(DEFAULT_KEYS_DIALER);
  51. mGridView01.setSelection(2);
  52. mGridView01.refreshDrawableState();
  53. }
  54. });
  55. mButton02.setOnClickListener(new Button.OnClickListener()
  56. {
  57. @Override
  58. public void onClick(View v)
  59. {
  60. // TODO Auto-generated method stub
  61. /* 9个元素,以3列方式显示(3x3) */
  62. mGridView01.setNumColumns(3);
  63. aryAdapter1 = new ArrayAdapter<String>
  64. (EX04_18.this, R.layout.simple_list_item_1_small, mGames2);
  65. mGridView01.setAdapter(aryAdapter1);
  66. }
  67. });
  68. mGridView01.setOnItemClickListener
  69. (new GridView.OnItemClickListener()
  70. {
  71. @Override
  72. public void onItemClick(AdapterView<?> parent,
  73. View v, int position, long arg3)
  74. {
  75. // TODO Auto-generated method stub
  76. /* 判断Adapter里的元素个数,判断被单击的是第几个元素名称 */
  77. switch(aryAdapter1.getCount())
  78. {
  79. case 4:
  80. /* positionGridView里的元素索引值 */
  81. mTextView01.setText(mGames1[position]);
  82. break;
  83. case 9:
  84. mTextView01.setText(mGames2[position]);
  85. break;
  86. }
  87. }
  88. });
  89. }
  90. }

res/layout/simple_list_item_1_small.xml

放在layout下面的simple_list_item_1_small.xml,是用来配置ArrayAdapter第二个参数text- ViewResourceId,必须为TextView进行配置,若需要更改放入Item文字的模式,可以通过这个文件来进行文字大小、模式的属性设置,而一旦放入ArrayAdapter,这个配置就会立即生效;当然也可以设置许多的layout xml,并提供给不同的GridView来使用,以此让每一个GridView都有不同的风貌。

<?xml version="1.0" encoding="utf-8"?>

<TextView

xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/myCheckedTextView1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textColor="@drawable/blue"

android:textSize="12sp"

android:textAppearance="?android:attr/textAppearanceLarge"

android:gravity="center_vertical"

android:paddingLeft="6dip"

android:minHeight="?android:attr/listPreferredItemHeight"

/>

扩展学习

既然谈到了ArrayAdapter,先来看看这个类的原型。

android.widget.ArrayAdapter.ArrayAdapter(Context context, int textViewResourceId, String[] objects)

android.widget.ArrayAdapter.ArrayAdapter需要传递3个参数才能构造,分别说明如表4-2所示。

4-2 需传入的3个参数

Context context

现有程序的context

int textViewResourceId

要使用的Layout文件Resource ID,当中必须包含一个TextView

String[] objects

要放入的字符串数组

GridViewWidget XML属性名称及GridView对象的方法对应如表4-3所示。

4-3 XML属性名称及对应的对象方法

XML属性名称

对应的对象方法

android:columnWidth

setColumnWidth(int)

android:gravity

setGravity(int)

android:horizontalSpacing

setHorizontalSpacing(int)

android:numColumns

setNumColumns(int)

android:stretchMode

setStretchMode(int)

android:verticalSpacing

setVerticalSpacing(int)

最后来看看刚才构造ArrayAdapter时所使用的“simple_list_item_1_small.xml”,这个文件是提供给GridViewLayout配置,范例程序共使用了textColortextSizetextAppearance等属性,但其实只要利用以下的XML基本元素,就可以满足GridView可使用的ArrayAdapter TextView

<?xml version="1.0" encoding="utf-8"?>

<TextView

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

4.19 在Activity里显示列表

范例说明

应用程序继承自Activity之后,若要在页面里布局具有列表(List)效果的互动页面,那么就必须在Layout里添加ListView Widget,在这个范例里,放置了一个ListView列表,并设计两个事件ListenerOnItemSelectedListener事件为鼠标的滚轮转动时所选择的值;OnItemClickListener事件则为当鼠标单击时,所触发的事件。

本范例的学习重点在于判断ListView的“选择”以及“单击”两者之间的差异,并学会如何将列表选项放入到ListView当中。

范例程序

src/irdc.ex04_13/EX04_13.java

在添加ArrayAdapter里,使用ArrayAdapter(Context context, int textViewResourceId, T[] objects)这个构造器,其中textViewResourceId是定义在“res/layout/my_simple_list_item.xml”里的资源Resource IDR.layout.my_simple_list_item),里面所使用的组件为CheckedTextView,如此OnItem- ClickListener才可取得UserListView中选择的项目。

另外值得一提的是,范例程序示范了LinearLayout对象,动态地将TextViewListView“附加”进原有的Layout布局当中,程序语句LinearLayout.LayoutParams param1为创建LayoutParams对象param1,再调用myLinearLayout.addView(myTextView, param1);来将param1对象传入,达到动态配置TextView的结果。

/* import程序略 */

public class EX04_19 extends Activity

{

private static final String[] array =

{

"sunday", "monday", "tuesday",

"wednesday", "thursday", "friday",

"saturday"

};

LinearLayout myLinearLayout;

TextView myTextView;

ListView myListView;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

/* 添加LinearLayout */

myLinearLayout = new LinearLayout(this);

myLinearLayout.setOrientation(LinearLayout.VERTICAL);

myLinearLayout.setBackgroundColor(android.graphics.Color.WHITE);

/* 添加TextView */

myTextView = new TextView(this);

LinearLayout.LayoutParams param1 = new LinearLayout.LayoutParams

(

LinearLayout.LayoutParams.FILL_PARENT,

LinearLayout.LayoutParams.WRAP_CONTENT

);

myTextView.setText(R.string.title);

myTextView.setTextColor(getResources().getColor(R.drawable.blue));

/* TextView添加到myLinearLayout */

myLinearLayout.addView(myTextView, param1);

/* 添加ListView */

myListView = new ListView(this);

LinearLayout.LayoutParams param2 = new LinearLayout.LayoutParams

(

LinearLayout.LayoutParams.FILL_PARENT,

LinearLayout.LayoutParams.WRAP_CONTENT

);

myListView.setBackgroundColor

(getResources().getColor(R.drawable.ltgray));

/* ListView添加到myLinearLayout */

myLinearLayout.addView(myListView, param2);

/* LinearLayout添加到ContentView */

setContentView(myLinearLayout);

/* new ArrayAdapter对象并将array字符串数组传入 */

ArrayAdapter<String> adapter =

new ArrayAdapter<String>

(this, R.layout.my_simple_list_item, array);

/* ArrayAdapter添加到ListView对象中 */

myListView.setAdapter(adapter);

/* myListView添加OnItemSelectedListener */

myListView.setOnItemSelectedListener

(new AdapterView.OnItemSelectedListener()

{

@Override

public void onItemSelected

(AdapterView<?> arg0, View arg1, int arg2, long arg3)

{

/* 使用getSelectedItem()将选择的值带入myTextView */

myTextView.setText

("你选的是" + arg0.getSelectedItem().toString());

}

@Override

public void onNothingSelected(AdapterView<?> arg0)

{

// TODO Auto-generated method stub

}

});

/* myListView添加OnItemClickListener */

myListView.setOnItemClickListener

(new AdapterView.OnItemClickListener()

{

@Override

public void onItemClick

(AdapterView<?> arg0, View arg1, int arg2, long arg3)

{

/* 使用String[index]arg2为单击到ListViewindex

并将值带入myTextView */

myTextView.setText("你选的是" + array[arg2]);

}

});

}

}

res/layout/my_simple_list_item.xml

<?xml version="1.0" encoding="utf-8"?>

<CheckedTextView

xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/myCheckedTextView1"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:textColor="@drawable/black"

/>

扩展学习

果希望选择一个以上的值,可以用ListView提供的setChoiceMode,传入的值有以下3种,如表4-4所示。

4-4 3种常数所传入的值

ListView.CHOICE_MODE_NONE

0

没有指定选择方式时

ListView.CHOICE_MODE_SINGLE

1

最多一个

ListView. ListView.CHOICE_MODE_MULTIPLE

2

多选

ArrayAdapter的构造器textViewResourceId传入Android.R.layout.simple_list_item_multiple_
choice
,代表ListView是可多选的,此时ListView需要setChoiceMode传入ListView. ListView.CHOICE_MODE_MULTIPLE2,即可做多选功能。

4.20 以动态列表配置选项

ListActivityMenu整合技巧

范例说明

至此之前所使用的应用程序,都是继承自Activity类所派生的范例(Android.app.Activity),本范例将介绍另一个与Activity不同的ListActivityAndroid.app.ListActivity),ListActivity类型的布局配置应用程序,常用来显示菜单列表、列表明细项目,假如让程序继承ListActivity,可以实现以下的方法,如表4-5所示。

4-5 可实现的方法列表

getListAdapter()

取得目前列表项目的Adapter

getListView()

取得目前列表的View

续表

getSelectedItemId()

取得目前Keypad所选择的Item ID

getSelectedItemPosition()

取得目前Keypad所选择的Item索引值

onContentChanged()

ListActivity列表内容更动事件

onListItemClick(ListView, View, int, long)

User在列表项目单击触发事件

onRestoreInstanceState(Bundle)

当还原至此实例状态事件

setListAdapter(ListAdapter)

设置ListActivity的列表项目

setSelection(int)

设置所选择项目

ListActivity默认并不一定要像继承自Activity一样,必须使用setContentView来设置版型Layout才能显示页面,ListActivity可以在不必重写protected void onCreate(Bundle savedInstance State)的情况下,直接将列表加载至ListActivity中,非常便利,常用在如投票选项选择、多项目列表条列显示、文件资源管理器等。

本范例示范了在ListActivity中创建两个Menu菜单功能,一开始程序不会加载任何列表内容,所以程序运行后,画面是黑漆漆的一片,接着利用这两个Menu菜单功能,动态显示不同的列表项目到ListActivity上。而为了捕捉UserListActivity上的单击项目,重写了onListItemClick()方法来获取User单击的List Item项目,为了简化程序,输出改以Toast来提示,作为Item单击事件判断之用。

<!--[endif]-->

<!--[if !vml]-->

范例程序

src/irdc.ex04_20/EX04_20.java

你应该发现了主程序继承的对象从Activity换成了ListActivity,虽然该程序也重写了Activity里的onCreate()方法,但为了对照,在onCreate()中并没有任何的setContentView的描述。主程序重写了ListActivity才有的onListItemClick()方法,用以判断UserView上面所单击的事件,在其中取得单击的position位置(索引值),再通过mString[]字符串数组将其文字取出,最后以Toast输出。

两个类成员MENU_LIST1MENU_LIST2皆为整数,设置其为final的缘故,是因为要在onCreateOptionsMenu()使用新建Menu菜单之外,还需要在User单击事件后的onOptionsItem- Selected()里判断,初始化的常数值为Menu.FIRST0)以及Menu.FIRST+11),为后续判断User究竟是单击哪一个Menu菜单功能所设计的flag

/* import程序略 */

public class EX04_20 extends ListActivity

{

private int selectedItem = -1;

private String[] mString;

static final private int MENU_LIST1 = Menu.FIRST;

static final private int MENU_LIST2 = Menu.FIRST+1;

private ArrayAdapter<String> mla;

@Override

protected void onCreate(Bundle savedInstanceState)

{

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

}

@Override

protected void onListItemClick

(ListView l, View v, int position, long id)

{

// TODO Auto-generated method stub

selectedItem = position;

Toast.makeText(EX04_20.this,

mString[selectedItem],

Toast.LENGTH_SHORT).show();

super.onListItemClick(l, v, position, id);

}

@Override

public boolean onCreateOptionsMenu(Menu menu)

{

// TODO Auto-generated method stub

/* menuID */

int idGroup1 = 0;

/* The order position of the item */

int orderMenuItem1 = Menu.NONE;

int orderMenuItem2 = Menu.NONE+1;

menu.add(idGroup1, MENU_LIST1,

orderMenuItem1, R.string.str_menu_list1);

menu.add(idGroup1, MENU_LIST2,

orderMenuItem2, R.string.str_menu_list2);

return super.onCreateOptionsMenu(menu);

}

@Override

public boolean onOptionsItemSelected(MenuItem item)

{

// TODO Auto-generated method stub

switch(item.getItemId())

{

case (MENU_LIST1):

mString = new String[]

{

getResources().getString(R.string.str_list1),

getResources().getString(R.string.str_list2),

getResources().getString(R.string.str_list3),

getResources().getString(R.string.str_list4)

};

mla = new ArrayAdapter<String>(EX04_20.this, R.layout.main, mString);

EX04_20.this.setListAdapter(mla);

break;

case (MENU_LIST2):

mString = new String[]

{

getResources().getString(R.string.str_list5),

getResources().getString(R.string.str_list6),

getResources().getString(R.string.str_list7),

getResources().getString(R.string.str_list8)

};

mla = new ArrayAdapter<String>(EX04_20.this, R.layout.main, mString);

EX04_20.this.setListAdapter(mla);

break;

}

return super.onOptionsItemSelected(item);

}

}

res/layout/main.xml

请仔细观察这里的main.xml与过去的main.xml有何不同?里头并没有任何关于<Linear Layout><ListView>的描述。只有一个TextView,而且将xmlns:Android属性写在<TextView>当中,如果少了这一行,将导致编译错误。

<?xml version="1.0" encoding="utf-8"?>

<TextView

xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/myTextView1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"

/>

扩展学习

本范例的学习重点在于如何在ListActivity当中,创建Menu菜单功能(重写onCreate- OptionsMenu()onOptionsItemSelected()方法),以及如何使用ArrayAdapter<String>setListAdapter方法,而此范例里的layout/main.xml,并非是用在重写onCreate()时的setContentView(),而是用在ArrayAdapter的构造当中,作为ListActivity列表项目的显示Layout

当然,假如想自定义ListActivity的布局Layout,同样也可以通过重写Activityon- Create方法来自定义布局,而不使用默认全屏幕的List列表画面,方法是先重写Activity里的onCreate()方法,在其中调用setContentView()方法,并将Layout传入。但请留意,在这个Layout设置文件中,必须包含一个ListViewWidget,否则将会导致程序运行时错误,如以下这个例子。

<?xml version="1.0" encoding="UTF-8"?>

<LinearLayout

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:paddingLeft="8"

android:paddingRight="8">

<ListView

android:id="@+id/android:list"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="#00FF00"

android:layout_weight="1"

android:drawSelectorOnTop="false"/>

<TextView

android:id="@+id/android:empty"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="#FF0000"

android:text="no data"/>

</LinearLayout>

Layout当中配置一个ListView之外,还要指定其android:id值为“@+id/android:list”,以及所配置的TextViewID为“android:empty”,只要程序看到TextViewIDandroid:empty,就会隐藏这个Widget配置,如上述XML所示。

android.app.ListActivity的其他子类还有LauncherActivityPreferenceActivity

分享到:
评论

相关推荐

    安卓桌面应用EyeRoom.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    仿随手记的炫酷饼图.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    webview重载使用&自定义网址.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    C语言学习工程和C语言项目.zip

    C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI C”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。 [5] C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语言。 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。

    带暂停功能倒计时TimeCountDown盒子适用.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    Google翻译.txt

    Google翻译.txt

    汽车车灯检测机械臂设计.doc

    汽车车灯检测机械臂设计.doc

    网络购物中心项目源码.rar

    网络购物中心项目源码.rar是一个压缩文件包,包含了一个基于Web技术的电子商务平台的全部源代码和相关资源。这个源码包旨在提供一个功能全面、界面友好的在线购物体验,它集成了商品浏览、搜索、购买、支付以及用户管理等核心电商功能。该项目采用了当下流行的开发框架和编程语言,比如使用HTML5, CSS3, JavaScript, PHP和MySQL数据库等技术,确保了网站的响应速度和跨浏览器兼容性。对于即将毕业的学生或者正在寻找实践项目的课程设计者来说,这个源码包是一个宝贵的资源。它不仅提供了一个实际应用的平台以供学习和研究,还允许用户根据需求进行定制和扩展,如添加新的功能模块或优化现有的代码结构。此外,项目文档详细记录了系统架构、功能实现和部署流程,为初学者提供了清晰的指引。通过分析和修改这份源码,学生可以深化对Web开发的理解,提高编程能力,并且有机会将理论知识转化为实际操作技能。此源码包适合作为计算机科学与技术、软件工程、信息技术等相关专业的毕业设计或课程设计项目,能够帮助学生在完成学业的同时,积累实战经验,增强就业竞争力。无论是作为学习的起点,还是作为未来职业生涯的一个跳板,网络购物

    C语言仓库,存储的是C语言代码.zip

    C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI C”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。 [5] C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语言。 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。

    Sora AI Videos的案例站点

    这是Sora AI Videos的案例站点,使用此项目可以帮助你快速构建Sora AI的演示项目。

    2015园林业务齐发展,区域拓展加速(20页).zip

    2015园林业务齐发展,区域拓展加速(20页).zip

    机械臂的物体识别与抓取技术研究.pdf

    机械臂的物体识别与抓取技术研究.pdf

    使用不同的超导间隙模型拟合从穿透深度获得的超流体密度数据matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    一个年终抽奖系统,可以根据你需要的去设置

    年终抽奖系统的模型,需要需要特殊定值,可以留言

    埃博拉优化搜索算法matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    ECommerceCrawlers-master.zip

    实战多种网站、电商数据爬虫。包含:淘宝商品、微信公众号、大众点评、闲鱼、阿里任务、百度贴吧、豆瓣电影、包图网、全景网、豆瓣音乐、某省药监局、搜狐新闻、机器学习文本采集、fofa资产采集、汽车之家️️️

    viewflow视图切换效果.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    可二次开发广州酒店信息管理平台.rar

    广州酒店信息管理平台是一个针对酒店行业设计的综合性信息管理系统,旨在通过现代化的信息技术手段提高酒店运营效率、改善客户体验,并为管理者提供决策支持。该平台以用户友好的界面和强大的数据处理能力为特点,涵盖了客房预订、入住管理、餐饮服务、库存管理、财务报表等多个模块,实现了酒店业务流程的自动化和智能化。作为毕业设计或课程设计项目,这个平台提供了丰富的功能和灵活的二次开发环境。学生可以根据自己的专业知识和兴趣,对现有系统进行深入分析,提出创新改进方案,或者添加新的功能模块。例如,可以通过集成人工智能算法来优化房间分配策略,利用大数据分析技术预测市场趋势,或者开发移动端应用以便客户能够随时随地访问服务。源码文件包中包含了完整的系统架构设计文档、数据库结构、前后端代码以及详细的API文档,使得学生能够快速理解系统运作机制并开始二次开发。此外,平台采用了模块化的设计思想,便于学生按需修改或扩展功能,同时也有助于培养学生的软件工程实践能力和解决实际问题的能力。总之,广州酒店信息管理平台不仅为学生提供了一个实战演练的机会,而且通过实际操作加深了对酒店管理业务和软件开发流程的理解,是一份极具挑战性和实用

    百度翻译.txt

    百度翻译.txt

    python源码python基础

    python源码python基础提取方式是百度网盘分享地址

Global site tag (gtag.js) - Google Analytics