• 2020/2/13学习总结


    今天学习了关于ListView控件的基础知识

    1.ListView:在Android中,其实ListView就相当于web中的jsp,Adapter是适配器,它就相当于web中的Servlet,Adapter的作用就是把数据展示在Listview中

    2.ListView的一些方法:

      设置表头:

     ColumnHeader title=new ColumnHeader(); //声明标头,并创建对象。
       title.Text="标头1名称"; //标头一显示的名称。
       title.Width=120; //标头一名称 的宽度。
       this.listView1.Columns.Add(title); //将标头添加到ListView控件。

    3.适配器

    3.1 ArrayAdapter 是字符串数值,只能在ListView显示出文本信息。

    3.2 BaseAdapter 一种自定义的数据来源,要自定义布局方式,可以放置图片,按钮,文本之类的。

    3.3 SimpleCursorAdapter 数据来源于数据库。

    4 使用ListView为其添加ArrayAdapter的步骤。

    4.1在布局文件中添加ListView定义

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
    
        android:id="@+id/costlist"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">
        tools:context=".OneActivity"
    
    
        <ListView
            android:id="@+id/list1"
            android:layout_width="150dp"
            android:layout_height="match_parent" />
    
    
    </LinearLayout>

    4.2 在主程序中绑定适配器

    import android.app.Activity;
    
    import android.os.Bundle;
    
    import android.widget.ArrayAdapter;
    
    import android.widget.ListView;
    
    public class MyListView extends Activity{
    
      private static final String[] str=new String[]{"first","second","third","fourth","fifth"};//定义要列出的项目内容
    
      @Override
    
      public void onCreate(Bundle savedInstanceState){
    
        super.onCreate(savedInstanceState);
    
        setContentView(R.layout.main);
    
        lv=(ListView)findViewById(R.id.lv);
    
        //绑定ArrayAdapter适配器
    
        lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,str));
    
          }
    
         }

    其中  lv.setAdapter(Context context, int textViewResourceId, T[] objects

    第一个参数表示上下文

    第二个参数表示一个包含TextView,用来填充listView的每一行的布局资源ID

    第三个参数为ListView的内容

    通过指定第二个参数来实现不同的显示效果,

    资源android.R.layout.simple_list_item_1来实现仅显示内容,无勾选。

    资源android.R.layout_simpel_list_item_checked实现带选择框的ListView,需要用setChoiceMode()设定选择为多选还是单选。

    资源android.R.layout.simple_list_item_multiple_choice实现带checkbox的ListView,需要用setChoiceMode()设定选择为多选还是单选。

    资源android.R.layout.simple_list_item_single_choice实现带RadioButton的ListView,需要用setChoiceMode()设定为多选还是单选。

    实现带RadioButton的ListView并设置多选:

    lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_
    
      single_choice,str));
    
      lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

    5.使用自定义适配器的步骤

    5.1 同4.1

    5.2为ListView中的每一项Item定义布局文件(这里实现三列显示文本,每一列的同一都是一个Item)

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/text1"
            android:layout_width="150dp"
            android:layout_height="100dp" />
    
        <TextView
            android:id="@+id/text2"
            android:layout_width="150dp"
            android:layout_height="100dp" />
    
        <TextView
            android:id="@+id/text3"
            android:layout_width="150dp"
            android:layout_height="100dp" />
    </LinearLayout>

    5.3 将每一个Item封装为一个类,并编写get()和set()函数,相当于java Been。

    5.4 编写自定义适配器(需要重写4个方法)

    public class MyAdapter extends BaseAdapter {
        private List<Message> Datas;//需要显示的内容
        private Context mContext;//上下文参数
    
        
    //构造函数
    public MyAdapter(List<Message> datas, Context mContext) {         Datas = datas;         this.mContext = mContext;     }     /**      * 返回item的个数      * @return      */     @Override     public int getCount() {         return Datas.size();     }     /**      * 返回每一个item对象      * @param i      * @return      */     @Override     public Object getItem(int i) {         return Datas.get(i);     }     /**      * 返回每一个item的id      * @param i      * @return      */     @Override     public long getItemId(int i) {         return i;     }     /**      * 暂时不做优化处理,后面会专门整理BaseAdapter的优化      * @param i      * @param view      * @param viewGroup      * @return      */     @Override     public View getView(int i, View view, ViewGroup viewGroup) {         view = LayoutInflater.from(mContext).inflate(R.layout.list_item,viewGroup,false);       TextView money = (TextView)view.findViewById(R.id.text1);
             TextView beizhu = (TextView)view.findViewById(R.id.text2);
             TextView data = (TextView)view.findViewById(R.id.text3);

             money.setText(String.valueOf(Datas.get(i).getMoney()));
             beizhu.setText(Datas.get(i).getBeizhu());
             data.setText(Datas.get(i).getData());
    
             //此处需要返回view 不能是view中某一个         

    return view;     } }

    getView()介绍:

    三个参数的意义:

    int i

    一般BaseAdapter都是很多类型一样的数据展示在界面,该属性是判断显示在界面上的是第几个,通过position在BaseAdapter自定义的数组或者集合中取值。并展示在界面上。

    View view 

    展示在界面上的一个item。因为手机屏幕就那么大,所以一次展示给用户看见的内容是固定的,如果你List中有1000条数据,不应该new1000个converView,那样内存肯定不足,应该学会控件重用,滑出屏幕的converView就在下面新进来的item中重新使用,只是修改下他展示的值

    ViewGroup viewGroup

    这个属性是加载XML视图时使用

    各个方法的意义:

    得到布局文件中每个控件的id,为其设置值。 textView1.setText(Datas.get(i).getTheme()); 得到列表中第i个位置的对象调用他的get()函数为控件设置值。

    5.5 在Activity中调用ListView并为其设置适配器

    public class MainActivity extends Activity{
    //    这三个经常是同时出现的
        private List<Message> lists;
        private MyAdapter adapter;
        private ListView listView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            listView = (ListView) findViewById(R.id.list1);
            lists = new ArrayList<>();
           //利用封装好的类类型像list中添加内容
    lists.add(
    new Message("1000","工资收入","2020/2/1"));         lists.add(new Message("-260","超市支出","2020/2/2"));         lists.add(new Message("-40","电费支出","2020/2/3"));         adapter = new MyAdapter(lists,MainActivity.this);         listView.setAdapter(adapter);     } }
     
  • 相关阅读:
    Leetcode264. Ugly Number II丑数2
    Leetcode221. Maximal Square最大正方形
    223. Rectangle Area
    Leetcode216. Combination Sum III组合总数3
    Leetcode200. Number of Islands岛屿的个数
    Leetcode199. Binary Tree Right Side View二叉树的右视图
    Leetcode179. Largest Number最大数
    从零开始学Linux系统(二)之基本操作指令
    从零开始学Linux系统(四)之Vi/Vim操作指令
    MySQL基础原创笔记(二)
  • 原文地址:https://www.cnblogs.com/wangzhaojun1670/p/12308535.html
Copyright © 2020-2023  润新知