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

摘要

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

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

609c171dc627

ListView图示

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

609c171dc627

图示

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

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

609c171dc627

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中一个联系人的布局

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="wrap_content">

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

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名"/>

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签名"/>

609c171dc627

qqitem

qq头像我们固定成200px*200px

利用相对布局调整两个TextView的位置

调整qq名字的大小,实现简单的Item布局

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

public class QQAdapter extends ArrayAdapter {

private int resourceId;

public QQAdapter(Context context, int textViewResourceId, List 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 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)添加我们的适配器,点击运行

609c171dc627

qqlist

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值