AndroidStudio问题与解答|青训营笔记

288 阅读16分钟

这是我参与【第四届青训营】笔记创作活动的第九天

1.如何去掉应用最上面的导航栏

在AndroidManifest.xml文件中将
android:theme="@style/AppTheme">修改为
android:theme="@style/Theme.AppCompat.Light.NoActionBar">

2.如何设置组件对齐方式

通过设置gravity(元素摆放位置)和layout_gravity(元素相对父控件摆放位置)属性进行调试,对齐方式可多选

gravity属性

属性值位置
top在布局顶部(horizontal时可用)
botton在布局底部(horizontal时可用)
left在布局左侧(vertical时可用)
right在布局右侧(vertical时可用)
center_horizontal水平居中(vertical时可用)
center_vertical垂直居中(horizontal时可用)
center水平或垂直居中(均有效)

3.常规View的属性与方法

View类是所有Android控件和容器的父类
通用属性:id,height,width,margin,paddinggravity
通用方法:setId(@IdRes int id),setLayoutParams(ViewGroup.LayoutParams params),setPadding(int left,int top,int right,int bottom)
特定属性与方法:TextView,ImagView,CheckBox,Button,EditText

image-20220815214928096

4.文本框TextView常用属性

//在界面显示一段文本信息
android:text      文字内容
android:textSize  文字大小
android:textStyle 文字格式(normal, bold, italic, bold|italic)
android:textColor 文字颜色

image-20220815214945809

5.输入框 EditText常用属性( 是TextView的子类)

android:hint             提示文字
android:inputType        输入类型,值为:text, number, textPassword…,多类型用|分割。
android:drawableLeft     输入框左侧(其他边也有相应的属性)绘制对象,值通常为一个可绘制资源文件,如@mipmap/xx
android:drawablePadding  可绘制对象的内边距
android:lines            输入框高多少行,值为整数。

image-20220815215019032

6.Button如何设置点击事件(是TextView的子类)

image-20220815215055134

public class ButtonActivity extends AppCompatActivity implements View.OnClickListener {
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button);
        Button btnclick2 = (Button) findViewById(R.id.btnclick2);
        Button btnclick3 = (Button) findViewById(R.id.btnclick3);
        Button btnclick4 = (Button) findViewById(R.id.btnclick4);
        //方式二:设置监听
        btnclick2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(ButtonActivity.this,"按钮的第二种监听方式",Toast.LENGTH_LONG).show();
            }
        });
        //方式三:设置监听
        btnclick3.setOnClickListener(new MyClickListener());
        //方式四:设置监听
        btnclick4.setOnClickListener(this);
    }
    //方式一:通过设置按钮的onClick属性
    public void myClick(View view){
        Toast.makeText(ButtonActivity.this,"按钮的第一种监听方式",Toast.LENGTH_LONG).show();
    }
    //方式四:重写onClick方法。一个页面多按钮时使用
    @Override
    public void onClick(View v) {
        Toast.makeText(ButtonActivity.this,"按钮的第四种监听方式",Toast.LENGTH_LONG).show();
    }
    //方式三:内部类的方式实现OnClickListener接口,并重写OnClick方
    class MyClickListener implements View.OnClickListener{
        @Override
        public void onClick(View v) {
            Toast.makeText(ButtonActivity.this,"按钮的第三种监听方式",Toast.LENGTH_LONG).show();
        }
    }
}
​

7.单选框RadioButton使用方法

//ViewGroup是LinearLayout的子类,所以ViewGroup默认是垂直的线性布局,可以用android:orientation属性来改变线性方向。
//可以使用andorid:onClick属性来设置单选框的点击事件,代码可以如下:
public void onRadioButtonClicked(View view) {//这个方法名是自己定义的
    // Is the button now checked?
    boolean checked = ((RadioButton) view).isChecked();
​
    // Check which radio button was clicked
    switch(view.getId()) {
        case R.id.radio_pirates:
            if (checked)
                // Pirates are the best
            break;
        case R.id.radio_ninjas:
            if (checked)
                // Ninjas rule
            break;
    }
}
//方法二
private RadioGroup sexgp;
private String selSext;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_radio_button);
​
    //获取RadioGroup
    sexgp = (RadioGroup)findViewById(R.id.sexgp);
    //设置监听
    sexgp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
             //获取选中的单选按钮
             RadioButton rcheck = (RadioButton) findViewById(checkedId);
             //获取选中的值
             String checkText = rcheck.getText().toString();
             //显示
             Toast.makeText(RadioButtonActivity.this,"您选中的是:"+checkText,Toast.LENGTH_LONG).show();
          }
      });
 }

8.多选框CheckBox使用举例

public class CheckBoxActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {
​
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_check_box);
        //获取CheckBox
        CheckBox ck1 = findViewById(R.id.ck1);
        CheckBox ck2 = findViewById(R.id.ck2);
        //设置监听事件
        ck1.setOnCheckedChangeListener(this);
        ck2.setOnCheckedChangeListener(this);
    }
    //选中事件
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
​
        if(isChecked){
            //Toast
            Toast.makeText(CheckBoxActivity.this,
                    buttonView.getText()+"被选择",Toast.LENGTH_SHORT ).show();
        }else{
            Toast.makeText(CheckBoxActivity.this,
                    buttonView.getText()+"取消选择",Toast.LENGTH_SHORT ).show();
        }
    }
}
​

9.计时器 Chronometer

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ChronometerMainActivity">

    <Chronometer
        android:id="@+id/timer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="#8BC34A"
        android:gravity="center_vertical"
        android:textSize="30pt" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/begin"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="#FF9800"
            android:text="开始计时" />

        <Button
            android:id="@+id/end"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="#FF9800"
            android:text="停止计时" />

        <Button
            android:id="@+id/goon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="#FF9800"
            android:text="恢复计时" />

        <Button
            android:id="@+id/reset"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="#FF9800"
            android:text="重置计时" />
    </LinearLayout>

</LinearLayout>
public class ChronometerMainActivity extends AppCompatActivity{
    Chronometer ch;//计时器
    Button begin;//开始计时按钮
    Button end;//结束计时按钮
    Button goon;//继续计时按钮
    Button reset;//重置计时按钮
    long recordingTime;//记录总时间
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chronometer_main);

        ch=(Chronometer)findViewById(R.id.timer);
        begin=(Button)findViewById(R.id.begin);
        end=(Button)findViewById(R.id.end);
        goon=(Button)findViewById(R.id.goon);
        reset=(Button)findViewById(R.id.reset);
        begin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ch.setBase(SystemClock.elapsedRealtime()-recordingTime);//SystemClock.elapsedRealtime()获取的是系统开机到现在的时间,不能被修改
                ch.start();//开始计时
                begin.setEnabled(false);
                end.setEnabled(true);
                goon.setEnabled(false);
                reset.setEnabled(true);
            }
        });
        end.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ch.stop();//停止计时
                recordingTime=SystemClock.elapsedRealtime()-ch.getBase();//保存当前停止的时间
                begin.setEnabled(false);
                goon.setEnabled(true);
                end.setEnabled(false);
                reset.setEnabled(true);
            }
        });
        goon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ch.start();
                begin.setEnabled(false);
                end.setEnabled(true);
                goon.setEnabled(false);
                reset.setEnabled(true);
            }
        });
        reset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                recordingTime=0;//将当前时间置为0
                ch.start();
                ch.setBase(SystemClock.elapsedRealtime());
                begin.setEnabled(false);
                goon.setEnabled(false);
                end.setEnabled(true);
                reset.setEnabled(false);
            }
        });
        ch.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {//为Chronomter绑定事件监听器
            @Override
            public void onChronometerTick(Chronometer chronometer) {
                if(SystemClock.elapsedRealtime()-ch.getBase()>3600*1000)//若计时超过了3600s=1 h即停止计时
                {
                    ch.stop();
                    begin.setEnabled(true);
                    end.setEnabled(false);
                    goon.setEnabled(false);
                }
            }
        });
    }
}

10.布局类型

①LinearLayout:

线性布局,将其包含的子控件以横向或纵向的方式排列,简言之就是将子元素排列成行或者列

②RelativeLayout:

相对布局,可以通过相对定位的方式让控件出现在布局的任何位置,实际开发中,多用此进行UI设计,可减少UI中的嵌套结构,在代码维护以及运行效率,具备一定优势

属性类型:

属性值为true或false

属性名称描述
layout_centerHorizental水平居中
layout_centerVertical垂直居中
layout_centerInparent相对于父控件完全居中
layout_alignParentBottom紧贴父控件的下边缘
layout_alignParentLeft紧贴父控件的左边缘
layout_alignParentRight紧贴父控件的右边缘
layout_alignParentTop紧贴父控件的上边缘
layout_alignWithParentIfMissing如果对应兄弟控件找不到,就以父控件作为参照物

属性值必须为ID的引用名“@id/id-name”

属性名称描述
layout_below在某元素下方
layout_above在某元素上方
layout_toLeftOf在某元素左方
layout_toRightOf在某元素右方
layout_alignTop本元素的上边缘和某元素的上边缘对其
layout_alignLeft本元素的左边缘和某元素的左边缘对其
layout_alignBottom本元素的下边缘和某元素的下边缘对其
layout_alignRight本元素的右边缘和某元素的右边缘对其

属性值为具体的像素值,如30dp,40dp

属性名称描述
layout_marginBottom离某元素底边缘的距离
layout_marginLeft离某元素左边缘的距离
layout_marginRight离某元素右边缘的距离
layout_marginTop离某元素底上边缘的距离

③FrameLayout:

帧布局,直接在屏幕上开辟出一块空白的区域,当我们往里面添加控件的时候,会默认把它们放到这块区域的左上角。它将子元素逐个重叠放入栈,最后添加的子元素显示在最上面。虽然默认将控件放置在相应区域的左上角,但是我们可以通过 layout_gravity 属性,将控件指定到其他的位置。FrameLayout 排列方式如图:

image-20220816205739372

FrameLayout 可以设置前景图片,这时需要设置对应的属性,FrameLayout 常用属性如表

属性名称描述
android:foreground设置帧布局容器的前景图像
android:foregroundGravity设置前景图像显示的位置

④GridLayout

GridLayout 是将布局按固定的行数、列数分割成固定网格。加入 GridLayout 的控件,按顺序从左到右、或从上到下摆放,也支持直接指定某个位置摆放,GridLayout 的排列方式如图

image-20220816210311681

GridLayout 布局的常用属性

属性名称描述
android:columnCount最大列数。
android:rowCount最大行数
android:orientationGridLayout中子元素的布局方向
android:alignmentModealignBounds:对齐子视图边界 alignMargins :对齐子视距内容,默认值
android:columnOrderPreserved使列边界显示的顺序和列索引的顺序相同,默认是true
android:rowOrderPreserved使行边界显示的顺序和行索引的顺序相同,默认是true
android:useDefaultMargins没有指定视图的布局参数时使用默认的边距,默认值是false

GridLayout 子元素的属性:GridLayout 也是容器,可在其中添加其他控件,这些控件将具有以下属性

属性名称描述
android:layout_column指定该单元格在第几列显示
android:layout_row指定该单元格在第几行显示
android:layout_columnSpan指定该单元格占据的列数
android:layout_rowSpan指定该单元格占据的行数
android:layout_gravity指定该单元格在容器中的位置
android:layout_columnWeight(API21加入)列权重
android:layout_rowWeight(API21加入) 行权重

⑤ ConstraintLayout布局

ConstraintLayout 可以在 API 9 以上的 Android 操作系统使用它,它主要是为了解决布局嵌套过多的问题而出现,以灵活的方式定位和调整小部件。从 Android Studio 2.3起,官方的模板默认使用 ConstraintLayout。 
ConstraintLayout 与 RelativeLayout 类似,采用相对定位的布局模式。
ConstraintLayout的灵活性要高于 RelativeLayout,性能更出色!还有一点是 ConstraintLayout 可以按照比例约束控件位置和尺寸,能够更好地适配屏幕大小不同的机型。

• ConstraintLayout 的常用属性

属性名称描述
layout_constraintTop_toTopOf期望视图的上边对齐另一个视图的上边
layout_constraintTop_toBottomOf期望视图的上边对齐另一个视图的底边
layout_constraintTop_toLeftOf期望视图的上边对齐另一个视图的左边
layout_constraintTop_toRightOf期望视图的上边对齐另一个视图的右边
layout_constraintBottom_toTopOf期望视图的下边对齐另一个视图的上边
layout_constraintBottom_toBottomOf期望视图的底边对齐另一个视图的底边
layout_constraintBottom_toLeftOf期望视图的底边对齐另一个视图的左边
layout_constraintBottom_toRightOf期望视图的底边对齐另一个视图的右边
属性名称描述
layout_constraintLeft_toTopOf期望视图的左边对齐另一个视图的上边
layout_constraintLeft_toBottomOf期望视图的左边对齐另一个视图的底边
layout_constraintLeft_toLeftOf期望视图的左边对齐另一个视图的左边
layout_constraintLeft_toRightOf期望视图的左边对齐另一个视图的右边
layout_constraintRight_toTopOf期望视图的右边对齐另一个视图的上边
layout_constraintRight_toBottomOf期望视图的右边对齐另一个视图的底边
layout_constraintRight_toLeftOf期望视图的右边对齐另一个视图的左边
layout_constraintRight_toRightOf期望视图的右边对齐另一个视图的右边

image-20220816211027209

基线定位:两个 TextView 控件的高度不一致,但是希望将他们的文本对齐,这个时候就可以使用layout_constraintBaseline_toBaselineOf 属性

image-20220816211321495

角度定位:角度定位是指可以用一个角度和一段距离来约束一个控件相对于另一个控件的位置。

ConstraintLayout 角度定位如图

image-20220816211355762

角度定位常用属性
属性名称描述
layout_constraintCircle参照控件的id
layout_constraintCircleAngle当前View的中心与目标View的中心的连线与Y轴方向的夹角(取值:0~360)
layout_constraintCircleRadius两个控件中心连线的距离
角度定位的使用

image-20220816211808947

边距定位:在 ConstraintLayout 中,可以使用 layout_margin 及其子属性进行边距定位,如图所示,B 控件可以设置与 A 控件的 margin(边距)属性来进行定位。

image-20220816211913442

边距定位的常用属性
属性名称描述
layout_marginBottom离某元素底边缘的距离
layout_marginLeft离某元素左边缘的距离
layout_marginRight离某元素右边缘的距离
layout_marginTop离某元素上边缘的距离
layout_marginStart如果在LTR布局(从左到右布局)模式下,该属性等同于layout_marginLeft。如果在RTL布局模式下,该属性等同于layout_marginRight。
layout_marginEnd如果在LTR布局(从左到右布局)模式下,该属性等同于layout_marginRight。如果在RTL布局模式下,该属性等同于layout_marginLeft。

边距定位的应用

在 ConstraintLayout 里面要实现边距定位,必须先约束相应控件在 ConstraintLayout 里的位置,否则将不生效(margin 属性只对其相约束的 View 起作用)。

image-20220816212034239

链定位

链定位很简单,ConstraintLayout 中的控件的排列方式就像一条铁链,铁链中的每一环是一个控件。控件通过下图所示的方式约束在一起,可以认为他们是一条链(图为横向的链,纵向同理)。

image-20220816212112998

image-20220816212134325

11.如何设置主页面

在建立一个页面控制文件Activity时,AndroidManifest会将之引入,只要将以下过滤器相关代码引入即可将此页面作为主页面。
<intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

12.Android Studio常用快捷键有哪些

image-20220816203622171

13.日志工具的使用

import android.util.Log;
public class MainActivity extends AppCompatActivity {
        private static final String TAG = "MainActivity";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate: running");
        }
}
方法作用
Log.v()用于打印琐碎的日志信息。对应级别为verbose,是Android日志里面级别最低的一种。
Log.d()用于打印调试信息。对应级别debug, 比verbose高一级。
Log.i()用于打印程序员设置的信息,如变量值等。帮助分析程序运行行为,对应级别info。
Log.w()用于打印警告信息。提示程序在这个地方可能有潜在的危险,最好去处理一下,对应级别warn,比info高一级。
Log.e()用于打印程序中的错误信息。一般代表程序出现了严重问题,必须尽快修复。对应级别为error,比warn高一级。

14.在xml文件中定义数组数据

//在res/values 资源目录下创建arrays.xml 数组资源文件
<resources>
    <string-array name="array_movie_names">
         <item>肖申克的救赎</item>
         <item>这个杀手不太冷</item>
         <item>霸王别姬</item>
         <item>盗梦空间</item>
         <item>阿甘正传</item>
    </string-array>
</resources>

image-20220816205122306

15.ImageView控件

ImageView 控件的功能是显示 Bitmap 位图或 Drawable 图片资源,主要用于图片展示。

属性名称描述
srcCompat在图片框所展示的图片内容
background可设置背景颜色、背景图片等作为背景展示
setAlpha透明度(取值0—1)
scaleType缩放类型

ImageView控件的使用:使用 ImageView 控件显示一张 Android 默认图片,同时设置其背景颜色及透明度,如图:

image-20220816212814234

ImageView 控件的 scaleType 缩放属性值,可使图片以不同的缩放方式显示,但不能控制background 属性所设置的背景图。scaleType 各属性的图片显示效果如图:

image-20220816212859584

我们除了可以在布局文件中设置显示的图片,还可以通过编码的方式设置 ImageView 控件的图片,参考代码如下:
//1.使用 setImageResource()方法设置图片
imageView1.setImageResource(R.mipmap.ic_launcher); 
//2.使用 setImageDrawable()方法设置图片
imageView1.setImageDrawable(getResources().getDrawable(R.mipmap.ic_launcher)); 
//3.使用 setImageBitmap()方法设置图片
String path = "";//图片本地路径
Bitmap bm = BitmapFactory.decodeFile(path); 
imageView1.setImageBitmap(bm);

image-20220816212949422

16.ImagButton控件

	ImageButton 是 Android 中一个常用的操作按钮控件。ImageButton 控件可以理解为 Button功能和 ImageView 功能的结合,与按钮相关的则和 Button 的用法基本类似,与图片相关的则和ImageView 的用法基本类似。

17. ProgressBar控件

ProgressBar是进度条控件,ProgressBar 的应用场景很多,比如 用户登录时,后台发送请求,以及进行等待服务器返回信息等一些比较耗时的操作。这个时候如果没有提示,用户可能会以为程序崩溃了或手机死机了,会大大降低用户体验,所以在需要进行耗时操作的地方,添加上进度条,让用户知道当前的程序在执行,也可以直观地告诉用户当前任务的执行进度等。

常用属性

image-20220816213437770

18.Toast控件

Android 中提供一种简单的消息提示框机制,Toast 控件可以在用户单击了某些按钮后,提示用户一些信息,提示的信息不能被用户单击,Toast 控件的提示信息根据用户设置的显示时间可自动消失。Toast 控件是通过代码的方式使用的,语法如下: 
makeText(Context context, CharSequence text, int duration)
该语法说明如下:
参数 context 表示 Toast 控件显示在哪个上下文,通常是当前 Activity。 
参数 text 可以自己写消息内容。 
参数 duration 指定显示时间,Toast 控件默认有 LENGTH_SHORT 和 LENGTH_LONG两个常量,分别表示短时间显示和长时间显示。
方法名称描述
makeText定义消息内容
setGravity设置布局位置
getView获取Toast视图
show显示

控件使用

image-20220816213725970

19.PopupWindows控件

PopupWindow(弹窗)是一个可以在 Activity 上显示任意 View 的控件。PopupWindow 控件在 Android 中经常使用,其效果与 Dialog 的效果类似,不同点在于它可以控制显示的位置,比如底部显示等。
方法名称描述
PopupWindow构造函数,常用参数表: contentView – 弹窗界面内容 width – 弹窗宽度 height – 弹窗高度 focusable – 能否聚焦
setTouchable是否支持点击操作
showAtLocation按指定位置弹出显示自定义视图
showAsDropDown下拉弹出显示自定义视图

20.AlertDialog控件

AlertDialog(警告窗体)控件可以在当前的界面上显示一个对话框。这个对话框是置于所有界面元素之上的,能够屏蔽其他控件的交互能力,因此 AlertDialog 一般用于提示一些非常重要的内容或者警告信息 。

控件创建: 在 代 码 中 通 过 构 造 器(AlertDialog.Builder)来构造标题、图标和按钮等内容。创建 AlertDialog 控件的常用方法如表

方法名称描述
AlertDialog.Builder警告窗体构造器的构造函数
builder.create创建警告窗体
方法名称描述
show显示警告窗体
isShowing判断警告窗体是否处于显示状态
setTitle设置警告窗体标题
setIcon设置图标
setMessage设置警告内容正文
setButton设置操作按钮

使用步骤:

创建构造器 AlertDialog.Builder 的对象。 
通过构造器对象调用 setTitle()、setMessage()、setIcon()等方法构造对话框的标题、信息和图标等内容。 
根据需要调用 setPositive/Negative/NeutralButton()方法设置正面按钮、负面按钮和中立按钮。 
调用构造器对象的 create()方法创建 AlertDialog 对象。 
AlertDialog 对象调用 show()方法,让对话框在界面上显示。

21.ListView控件

ListView 控件是 Android 操作系统为我们提供的一种列表显示的控件。它以列表的形式展示具体数据内容,并且能够根据数据的长度自适应屏幕显示。
ListView 控件允许用户通过上下滑动来将屏幕外的数据滚动到屏幕内,同时将屏幕内原有的数据滚动出屏幕,从而显示更多的数据内容。
ListView的用法:
1.UI布局设计  
	在activity_main.xml中加入ListView控件
	设计列表每行显示内容的布局,每行显示一张图片和文本的
2.使用适配器显示数据
	 //显示ListView
 	//1.获取ListView
	 myListView = findViewById(R.id.myListView);
	//2.创建适配器对象
	myAdapter = new ArrayAdapter<String>
	(MainActivity.this, android.R.layout.simple_list_item_1,books);
	//3.加载适配器
	myListView.setAdapter(myAdapter);

常用适配器

BaseAdapter:•即基本的适配器。它实际上就是一个抽象类,该类拥有四个抽象方法。根据这几个抽象方法来对ListView进行数据适配

SimpleAdapter:•SimpleAdapter继承自BaseAdapter,实现了BaseAdapter的四个抽象方法,分别是getCount()、getItem()、getItemId()、getView()方法。

ArrayAdapter:•ArrayAdapter也继承自BaseAdapter,与SimpleAdapter相同。ArrayAdapter通常用于适配TextView控件,例如Android系统中的设置菜单(Setting)。