ListView是Android中最常用的控件之一,几乎所有的应用都会运用到它。
由于手机屏幕空间大小比较有限,能够一次性在屏幕上显示的内容不多,当我们程序中有大量的数据需要显示的时候,就可以借助ListView来实现,比如说微信的聊天纪录,翻阅微博的信息等.
今天我们就用一个小例子来简单介绍一下ListView怎么使用
首先我们创建一个Project,然后在布局文件写一个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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".applist.App_List">
<ListView
android:id="@+id/app_listView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</LinearLayout>
ListView一定要有id哦,接下来我们需要创建另外一个xml文件,用来编写每一个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"
android:orientation="horizontal">
<ImageView
android:id="@+id/icon_imageView"
android:src="@mipmap/ic_launcher"
android:layout_width="60dp"
android:layout_height="60dp" />
<TextView
android:id="@+id/app_name_textView"
android:text="@string/app_name"
android:layout_width="match_parent"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:textSize="20sp"
android:layout_height="60dp" />
</LinearLayout>
接下来就是最关键的,我们需要把这个Item.xml文件里的布局绑定在ListView上
看看主代码
package com.example.asynctask.applist;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.example.asynctask.R;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
public class App_List extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_app__list);
ListView appListView = findViewById (R.id.app_listView); //初始化控件
List<String> appNames = new ArrayList<> ();
appListView.setAdapter (new AppListAdapter (getAppInfos()));
}
//获取所有用户的信息
private List<ResolveInfo> getAppInfos(){
Intent intent = new Intent (Intent.ACTION_MAIN,null);
intent.addCategory (Intent.CATEGORY_LAUNCHER);
return getPackageManager ().queryIntentActivities (intent,0);
}
public class AppListAdapter extends BaseAdapter{
List<ResolveInfo> mAppInfo;
//创建一个构造方法
public AppListAdapter(List<ResolveInfo> mAppNames) {
this.mAppInfo = mAppNames;
}
@Override
public int getCount() {
//有多少条数据
return mAppInfo.size ();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
//填充数据
//把xml文件转成java,获取到item_list.xml文件里的内容
LayoutInflater layoutInflater = (LayoutInflater) getSystemService (Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate (R.layout.item_list,null);
//绑定xml文件里的Icon以及Text
ImageView appIconImageView = convertView.findViewById (R.id.icon_imageView);
TextView appNameTextView = convertView.findViewById (R.id.app_name_textView);
appNameTextView.setText (mAppInfo.get (position).activityInfo.loadLabel (getPackageManager ()));
appIconImageView.setImageDrawable (mAppInfo.get (position).activityInfo.loadIcon (getPackageManager ()));
//设置点击事件
convertView.setOnClickListener (new View.OnClickListener () {
@Override
public void onClick(View v) {
//通过包名跳转到具体的应用
String packageName = mAppInfo.get (position).activityInfo.packageName;
String className = mAppInfo.get (position).activityInfo.name;
//构造一个组件
ComponentName componentName = new ComponentName (packageName,className);
Intent intent = new Intent ();
intent.setComponent (componentName);
startActivity (intent);
}
});
return convertView;
}
}
}
创建一个AppListAdapter适配器去继承BaseAdapter,然后重写里面的方法,然后需要把数据跟Adapter绑定在一次,最后返回converView,就可以把ListView显示出来啦
效果图如下: