美文网首页Android 开发
Android入门(4)-ListView实现qq好友列表

Android入门(4)-ListView实现qq好友列表

作者: 正经龙 | 来源:发表于2018-08-31 23:48 被阅读0次

    摘要

    ListView是Android最常用的控件之一,也是最难用的控件之一,通过对于《第一行代码》的ListView教学,自主实现了一个模拟qq好友列表,这里进行记录并讲解

    首先ListView是一个列表类型的布局,其中包含着一项又一项的ListItem,例如这样:


    ListView图示

    但是,要注意的是,ListItem可不是那么容易就可以装入到ListView中的,就比如我们包装礼品的时候,我们需要首先在打包盒里面设置好我们放置的物品的模具,我们才能够安安稳稳地打包我们的礼品,ArrayAdapter就是我们的模具,也叫做适配器。


    图示

    但是适配器只有默认一种类型,就是传入一个简单的TextView,也就是只能显示一条条字符串,所以我们要实现模拟qq好友列表,要先实现自己的适配器!

    实现自己的适配器之前,我们看看我们的好友列表是什么样子的


    qq列表

    总之呢就是一个图片+一个名字+一个签名
    图片我们可以保存为R.drawable.img的形式,也就是int 类型
    另外两个就是String类型。

    先创建自己的一个数据结构QQ

    public class QQ {
        private String qqName;
        private String qqText;
        private int qqImageId;
        public QQ(String QQName,String QQText,int QQImageId){
            qqName = QQName;
            qqText = QQText;
            qqImageId = QQImageId;
        }
        public String getQqName(){
            return qqName;
        }
        public String getQqText(){
            return qqText;
        }
        public int getQqImageId(){
            return qqImageId;
        }
    }
    

    实现了简单的数据结构,并且初始化,且实现了三个返回私有数据的接口。

    接下来实现我们小布局ListItem,也就是qq中一个联系人的布局

    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/qq_image"
            android:src="@drawable/ic_launcher_background"
            android:layout_width="200px"
            android:layout_height="200px"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"/>
    
        <TextView
            android:id="@+id/qq_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/qq_image"
            android:textSize="24sp" 
            android:hint="qq名"/>
    
        <TextView
            android:id="@+id/qq_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/qq_name"
            android:layout_alignLeft="@id/qq_name"
            android:layout_marginTop="10dp"
            android:hint="qq签名QQ签名QQ签名"/>
    
    </RelativeLayout>
    
    qqitem

    qq头像我们固定成200px*200px
    利用相对布局调整两个TextView的位置
    调整qq名字的大小,实现简单的Item布局

    接下来我们实现自定义的适配器类,继承自ArrayAdapter类,数据类型为QQ类型

    public class QQAdapter extends ArrayAdapter<QQ> {
        private int resourceId;
        public QQAdapter(Context context, int textViewResourceId, List<QQ> objects){
            super(context,textViewResourceId,objects);
            resourceId = textViewResourceId;
        }
    

    构造函数传进来三个参数,第一个是上下文Context,第二个是我们的布局文件,第三个是自定义数据结构的一个列表类型,也一堆要展示的数据,然后调用父类的构造函数,并且保存当前的布局文件。

    实现getView()函数,这个函数当我们将Item划到屏幕中心的时候即可调用,我们要动态给当前屏幕中央的Item添加布局。

    @Override
        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            QQ qq = getItem(position);
            View view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
            ImageView imageView = (ImageView)view.findViewById(R.id.qq_image);
            TextView nameView = (TextView)view.findViewById(R.id.qq_name);
            TextView textView = (TextView)view.findViewById(R.id.qq_text);
            imageView.setImageResource(qq.getQqImageId());
            nameView.setText(qq.getQqName());
            textView.setText(qq.getQqText());
            return view;
        }
    

    调用getItem(position)获取当前屏幕中央的数据
    新建布局对象,传进去布局、父布局、false设置当前布局没有父布局(意味着可以被其他布局所包含)
    将当前qq的信息传入对应的布局文件,然后给当前qq返回布局

    最后,我们在 MainActivity.java里面实现我们的数据初始化与显示。

    public class MainActivity extends AppCompatActivity {
    
        private List<QQ> qqList = new ArrayList<>();
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initQQ();
            QQAdapter adapter = new QQAdapter(MainActivity.this,R.layout.item_test,qqList);
            ListView listView = findViewById(R.id.list_view);
            listView.setAdapter(adapter);
        }
    
        private void initQQ(){
            for(int i = 0 ; i < 4 ; i++){
                QQ m1 = new QQ("YAOMENGLONG" , " just do it" , R.drawable.img_1);
                QQ m2 = new QQ("ChenChangLiang","i am chen sir",R.drawable.img_2);
                QQ m3 = new QQ("YaoYingjie","BALABALA",R.drawable.img_3);
                QQ m4 = new QQ("Bianjiaojiao","HAHAHAHAHAHAHAHAHAHA",R.drawable.img_4);
                qqList.add(m1);
                qqList.add(m2);
                qqList.add(m3);
                qqList.add(m4);
            }
        }
    }
    

    这里的ListView我们提前创建好了。利用initQQ初始化数据,传入我们的适配器中,最后利用listView.setAdapter(adapter)添加我们的适配器,点击运行

    qqlist

    有好多可以调整的地方,这里主要是对使用ListView进行简单的实践,就不拘小节啦~~

    相关文章

      网友评论

        本文标题:Android入门(4)-ListView实现qq好友列表

        本文链接:https://www.haomeiwen.com/subject/ejjswftx.html