zoukankan      html  css  js  c++  java
  • ListView

    听说方舟出来了?直接so库?过来补一补安卓,万一再火一把呢?这种事情谁说的准

    MainAcytivity :

    package com.fitsoft;
    
    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 java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
    
        List<UserInfo> dataList;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ListView listView = findViewById(R.id.list_view);
    
            dataList = new ArrayList<>();
            for(int i=0; i<50; i++){
                UserInfo userInfo = new UserInfo();
                userInfo.name = "张三"+i;
                userInfo.age = 10+i;
                userInfo.sex = i%2==0?"男":"女";
                dataList.add(userInfo);
            }
    
            UserInfoListAdapter userInfoListAdapter = new UserInfoListAdapter();
            listView.setAdapter(userInfoListAdapter);
    
        }
    
        class UserInfoListAdapter extends BaseAdapter {
            @Override
            public int getCount() {
                return dataList.size();
            }
    
            @Override
            public Object getItem(int position) {
                return dataList.get(position);
            }
    
            @Override
            public long getItemId(int position) {
                return position;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
    
                View itemRootView = convertView;
    
                if(itemRootView == null){
                    itemRootView = LayoutInflater.from(parent.getContext())
                                  .inflate(R.layout.item_userinfo, parent, false);
                }
    
                TextView tvName = itemRootView.findViewById(R.id.tv_name);
                tvName.setText(dataList.get(position).name);
                TextView tvAge = itemRootView.findViewById(R.id.tv_age);
                tvAge.setText(String.valueOf(dataList.get(position).age) );
                TextView tvSex = itemRootView.findViewById(R.id.tv_sex);
                tvSex.setText(dataList.get(position).sex);
    
                ImageView imageView = itemRootView.findViewById(R.id.image);
                if(dataList.get(position).sex.equals("男")){
                    imageView.setBackgroundResource(R.mipmap.ic_launcher);
                }else{
                    imageView.setBackgroundResource(R.mipmap.ic_launcher_round);
                }
    
                return itemRootView;
            }
        }
    
        class UserInfo{
            String name;
            int age;
            String sex;
        }
    }

    SimpleAdapter没啥用,直接上BaseAdapterSimpleAdapter也是继承BaseAdapter,但是太局限了),首先创建内部类UserInfoListAdapter,使之继承BaseAdapter,然后实现里面的四个方法,这四个方法是Adapter这个接口里的,这里主要实现getView方法,首先判断convertView是否为空,如果不为空,直接复用,如果为空,则创建新的View,这里就涉及convertView的缓存机制了,ListView会自动判断加载n个新的convertView,至于n是多少呢,我就不知道怎么判断的了,当上下或者左右滑动的时候,为了提高效率,convertView就会复用,直到n个全被复用,就会复用下n个,如何创建一个新的View?利用LayoutInflater通过上下文对象找到布局管理器,通过布局管理器将item_userinfo这个xml布局转化为View对象,就创建成功了,然后利用这个对象就可以找到布局中的相关组件了(例如:itemRootView.findViewById(R.id.image);),别的都是很容易懂的,不解释了,下面放布局:

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout 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"
        tools:context=".MainActivity">
    
        <ListView
            android:id="@+id/list_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginRight="8dp"
            android:divider="#F00"
            android:dividerHeight="2dp"
            android:overScrollMode="never"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>
    
    </android.support.constraint.ConstraintLayout>

    其中overScrollMode是默认值为always的滑动到边界产生的效果,divider是分割线颜色

    item_userinfo.xml

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <ImageView
                android:id="@+id/image"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
    
            <TextView
                android:id="@+id/tv_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
    
            <TextView
                android:id="@+id/tv_age"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
    
            <TextView
                android:id="@+id/tv_sex"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>
    
    </android.support.constraint.ConstraintLayout>

    效果图:

    效果图

  • 相关阅读:
    [转]Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源
    [转]Eclipse中配置Struts2并实现HelloWorld
    [转]android4.0.3 修改启动动画和开机声音
    版本管理 Git
    [转]Android动态加载jar/dex
    [转]JSP 9 大内置对象详解
    [转]TMX Map Format Tiled地图格式
    [转]C++按行读取文本文件
    [转]Java——Servlet的配置和测试
    [转]android条形码编解码
  • 原文地址:https://www.cnblogs.com/zqm-sau/p/11461844.html
Copyright © 2011-2022 走看看