• UI组件之AdapterView及其子类(五)ListView组件和ListActivity


    ListView组件是一个显示组件,继承AdapterView基类,前面已经介绍了分别使用ArrayAdapter,SimpleAdapter,扩展BaseAdapter来为LisView提供列表项http://blog.csdn.net/tuke_tuke/article/details/50527018。在当中都要在xml文件里定义ListView组件,然后再Activity.java文件里通过findViewById获取组件设置定义好的adapter就可以。

    可是ListActivity是直接继承Activity的,在ListActivity的源代码中已经定义了一个ListView组件属性。ListActivity的子类无需调用setContentView()来显示某个界面ListActivity的效果就是整个Activity就是一个列表,没有其它的组件。在使用ListActivity时,仅仅须要继承ListActivity,直接传入一个内容Adapter。

    ListActivity就是一个列表.

    MainActivity.java

    <span style="font-size:24px;">public class MainActivity extends ListActivity {//继承ListActivity
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
           
            //无需使用布局文件,-相当于它的布局文件里仅仅有一个ListView
            String[] s={"孙悟空","猪八戒","唐僧"};
            //创建ArrayAdapter对象,这里使用的是android提供的布局文件
            //ArrayAdapter<String>  ad=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,s);
           //以下是使用自己定义的一个列表项布局
            ArrayAdapter<String>  ad=new ArrayAdapter<String>(this,R.layout.array_item,s);
            
            //设置适配器
            setListAdapter(ad);
        }</span>

    总结一下:

    1,继承ListActivity

    2。定义适当的Adapter

    3。调用setListAdapter方法设置Adapter

    ListActivity的部分源代码:

    public class ListActivity extends Activity {
        /**
         * This field should be made private, so it is hidden from the SDK.
         * {@hide}
         */
        protected ListAdapter mAdapter;
        /**
         * This field should be made private, so it is hidden from the SDK.
         * {@hide}
         */
        protected ListView mList;
    
        private Handler mHandler = new Handler();
        private boolean mFinishedStart = false;
    
        private Runnable mRequestFocus = new Runnable() {
            public void run() {
                mList.focusableViewAvailable(mList);
            }
        };
    
        /**
         * This method will be called when an item in the list is selected.
         * Subclasses should override. Subclasses can call
         * getListView().getItemAtPosition(position) if they need to access the
         * data associated with the selected item.
         *
         * @param l The ListView where the click happened
         * @param v The view that was clicked within the ListView
         * @param position The position of the view in the list
         * @param id The row id of the item that was clicked
         */
        protected void onListItemClick(ListView l, View v, int position, long id) {
        }
    
        /**
         * Ensures the list view has been created before Activity restores all
         * of the view states.
         *
         *@see Activity#onRestoreInstanceState(Bundle)
         */
        @Override
        protected void onRestoreInstanceState(Bundle state) {
            ensureList();
            super.onRestoreInstanceState(state);
        }
    
        /**
         * @see Activity#onDestroy()
         */
        @Override
        protected void onDestroy() {
            mHandler.removeCallbacks(mRequestFocus);
            super.onDestroy();
        }
    
        /**
         * Updates the screen state (current list and other views) when the
         * content changes.
         *
         * @see Activity#onContentChanged()
         */
        @Override
        public void onContentChanged() {
            super.onContentChanged();
            View emptyView = findViewById(com.android.internal.R.id.empty);
            mList = (ListView)findViewById(com.android.internal.R.id.list);
            if (mList == null) {
                throw new RuntimeException(
                        "Your content must have a ListView whose id attribute is " +
                        "'android.R.id.list'");
            }
            if (emptyView != null) {
                mList.setEmptyView(emptyView);
            }
            mList.setOnItemClickListener(mOnClickListener);
            if (mFinishedStart) {
                setListAdapter(mAdapter);
            }
            mHandler.post(mRequestFocus);
            mFinishedStart = true;
        }
    
        /**
         * Provide the cursor for the list view.
         */
        public void setListAdapter(ListAdapter adapter) {
            synchronized (this) {
                ensureList();
                mAdapter = adapter;
                mList.setAdapter(adapter);
            }
        }
    
        /**
         * Set the currently selected list item to the specified
         * position with the adapter's data
         *
         * @param position
         */
        public void setSelection(int position) {
            mList.setSelection(position);
        }
    
        /**
         * Get the position of the currently selected list item.
         */
        public int getSelectedItemPosition() {
            return mList.getSelectedItemPosition();
        }
    
        /**
         * Get the cursor row ID of the currently selected list item.
         */
        public long getSelectedItemId() {
            return mList.getSelectedItemId();
        }
    
        /**
         * Get the activity's list view widget.
         */
        public ListView getListView() {
            ensureList();
            return mList;
        }
    
        /**
         * Get the ListAdapter associated with this activity's ListView.
         */
        public ListAdapter getListAdapter() {
            return mAdapter;
        }
    
        private void ensureList() {
            if (mList != null) {
                return;
            }
            setContentView(com.android.internal.R.layout.list_content_simple);
    
        }
    
        private AdapterView.OnItemClickListener mOnClickListener = new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id)
            {
                onListItemClick((ListView)parent, v, position, id);
            }
        };
    }



  • 相关阅读:
    一个程序员的负罪感
    【软件安装记录篇】本地虚拟机Centos7快速安装MySQL
    三分钟熟悉进制转换与位运算
    Base64 编码原理
    Java 注解
    数据结构之链表-动图演示
    数据结构之红黑树-动图演示(下)
    数据结构之红黑树-动图演示(上)
    通过TreeMap 和 冒泡算法对JSON 进行排序
    Quartz 之 windowService
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7077803.html
Copyright © 2020-2023  润新知