【第一行代码】ListView

简介

利用ListView做一个列表图片+文字的展示,实现点击事件。

成果展示

在这里插入图片描述在这里插入图片描述

ListView

允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚出屏幕。

基础用法-文本展示

数组中的数据无法直接传递给ListView,需要借助适配器来完成。
例如ArrayAdapter,它可以通过泛型来指定要适配的数据类型,在构造函数中把数据传入。
最后调用ListView的setAdapter()方法,将构建好的适配器对象传给ListView,这样就可以把数据显示到ListView上。
eg.

//最简单的一个ListView示例
private String[] data = {"RNG", "FPX", "IG", "SKT", "GRF", "DWG",
"TL", "C9", "CG", "G2", "FNC", "SPY", "HKA", "JT", "GAM", "AHQ"};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(
            MainActivity.this,android.R.layout.simple_list_item_1,data);
    ListView listView = (ListView) findViewById(R.id.list_view);
    listView.setAdapter(adapter);
}

进阶用法-定制界面

为每一个item准备一个图片

定义一个实体类Team
public class Team {
    private String name;
    private int imageId;

    public Team(String name, int imageId) {
        this.name = name;
        this.imageId = imageId;
    }

    public String getName() {
        return name;
    }

    public int getImageId() {
        return imageId;
    }
}
为item准备一个布局,新建team_item.xml

ImageView显示图片,TextView显示名字

<?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">

    <ImageView
        android:id="@+id/team_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/team_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="10dp"/>

</LinearLayout>
创建一个自定义的适配器
public class TeamAdapter extends ArrayAdapter<Team> {

    private int resourceId;

    public TeamAdapter(Context context, int resource, List<Team> objects) {
        super(context, resource, objects);
        resourceId = resource;
    }

    //添加一个Viewholder,对控件的实例进行缓存
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Team team = getItem(position);//获取当前实例
        View view;
        ViewHolder viewholder;
        if(convertView == null) {
            view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
            viewholder = new ViewHolder();
            viewholder.teamImage = (ImageView) view.findViewById(R.id.team_image);
            viewholder.teamName = (TextView) view.findViewById(R.id.team_name);
            view.setTag(viewholder);//将viewholder存到view中
        }
        else {
            view = convertView;
            viewholder = (ViewHolder) view.getTag();//重新获取viewholder
        }
        viewholder.teamImage.setImageResource(team.getImageId());
        viewholder.teamName.setText(team.getName());
        return view;
    }

    class ViewHolder{
        ImageView teamImage;
        TextView teamName;
    }
}
修改MainActivity
public class MainActivity extends AppCompatActivity {

    private List<Team> teamList = new ArrayList<>();

    //添加点击事件
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initTeams();
        TeamAdapter adapter = new TeamAdapter(MainActivity.this,
                R.layout.team_item,teamList);
        ListView listView = (ListView) findViewById(R.id.list_view);
        listView.setAdapter(adapter);
        //点击事件
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Team team = teamList.get(i);
                Toast.makeText(MainActivity.this,team.getName(),Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void initTeams() {
        Team rng = new Team("RNG",R.drawable.rng);
        teamList.add(rng);
        Team ig = new Team("IG",R.drawable.ig);
        teamList.add(ig);
        Team fpx = new Team("FPX",R.drawable.rng);
        teamList.add(fpx);
        Team skt = new Team("SKT",R.drawable.ig);
        teamList.add(skt);
        Team grf = new Team("GRF",R.drawable.rng);
        teamList.add(grf);
        Team dwg = new Team("DWG",R.drawable.ig);
        teamList.add(dwg);
        Team g2 = new Team("G2",R.drawable.rng);
        teamList.add(g2);
        Team fnc = new Team("FNC",R.drawable.ig);
        teamList.add(fnc);
        Team spy = new Team("SPY",R.drawable.rng);
        teamList.add(spy);
        Team tl = new Team("TL",R.drawable.ig);
        teamList.add(tl);
        Team c9 = new Team("C9",R.drawable.rng);
        teamList.add(c9);
        Team cg = new Team("CG",R.drawable.ig);
        teamList.add(cg);
        Team hka = new Team("HKA",R.drawable.rng);
        teamList.add(hka);
        Team ahq = new Team("AHQ",R.drawable.ig);
        teamList.add(ahq);
        Team gam = new Team("GAM",R.drawable.rng);
        teamList.add(gam);
        Team jt = new Team("JT",R.drawable.ig);
        teamList.add(jt);
    }
}

项目源码下载

github

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值