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);     } }
 
原文地址:https://www.cnblogs.com/wangzhaojun1670/p/12308535.html