以动态列表配置选项(ListActivity与Menu整合技巧)

来源:互联网 发布:淘宝客清退 编辑:程序博客网 时间:2024/06/12 01:27

package irdc.ex04_20;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class EX04_20 extends ListActivity
{
  private int selectedItem = -1;
  private String[] mString;
  /*
   * final方法
将方法声明为final,那就说明你已经知道这个方法提供的功能已经满足你要求,
不需要进行扩展,并且也不允许任何从此类继承的类来覆写这个方法,
但是继承仍然可以继承这个方法,也就是说可以直接使用。
另外有一种被称为inline的机制,它会使你在调用final方法时,直接将方法主体插入到调用处,
而不是进行例行的方法调用,例如保存断点,压栈等,这样可能会使你的程序效率有所提高,
然而当你的方法主体非常庞大时,或你在多处调用此方法,那么你的调用主体代码便会迅速膨胀,
可能反而会影响效率,所以你要慎用final进行方法定义。

final类
当你将final用于类身上时,你就需要仔细考虑,因为一个final类是无法被任何人继承的
,那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要进行修改或扩展。
对于final类中的成员,你可以定义其为final,也可以不是final。
而对于方法,由于所属类为final的关系,自然也就成了final型的
。你也可以明确的给final类中的方法加上一个final,但这显然没有意义。
   */
  static final private int MENU_LIST1 = Menu.FIRST;
  static final private int MENU_LIST2 = Menu.FIRST+1;
  /*
   * ArrayAdapter 接受一个数组或者List作为参数来构建显示ListView
   * 其他常用的Adapter还有ArrayAdapter ,SimpleAdapter,CursorAdapter
   */
  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)
  {
    /*
     * 当列表被选中时,调用这个方法. 子类需要重写
     * 当他们需要从选中的条目中获得数据时 ,子类能够调用getListView().getItemAtPosition(position)
     */
    /*
     * Parameters
l  The ListView where the click happened
v  The view that was clicked within the ListView
position  The position of the view in the list
id  The row id of the item that was clicked 

     */
    // TODO Auto-generated method stub
    selectedItem = position;
    Toast.makeText(EX04_20.this,
        mString[selectedItem],
        Toast.LENGTH_SHORT).show();//以toast的方式弹出被选项
    super.onListItemClick(l, v, position, id);
    }
  @Override
  public boolean onCreateOptionsMenu(Menu menu)
  {
    /*初始化选择菜单.可以把菜单项放到菜单中
     *当你需要为目录增加条目时:就实现Activity的onOptionsItemSelected(MenuItem)方法
     */
    // TODO Auto-generated method stub
    /* menu群组ID */
    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);
    }
  }
 
 
 
 


  
 
 
  main.xml
<?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"
/>

 

strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="hello">Hello World, EX04_20</string>
  <string name="app_name">EX04_20</string>
  <string name="str_list1">最后一战:星环战役</string>
  <string name="str_list2">火影忍者:破碎的羁绊</string>
  <string name="str_list3">吉他英雄:世界巡回 </string>
  <string name="str_list4">极速快感:卧底风云</string>
  <string name="str_list5">C++语言</string>
  <string name="str_list6">Java语言</string>
  <string name="str_list7">PHP语言</string>
  <string name="str_list8">Basic语言</string>
  <string name="str_menu_list1">显示列表1</string>
  <string name="str_menu_list2">显示列表2</string>
</resources>