适用人群:Android开发人员。
本文内容:简要介绍ListView&GridView的使用,为后续RecycleView的使用介绍打基础。
备注:
1.Android数据列表之GridView的使用:https://www.jianshu.com/p/9aa90798c1fb
2.Android数据列表之RecycleView的使用:https://www.jianshu.com/p/db00eed833cf
总文件目录如下图 & 界面效果如下图 如下:
总文件目录如下图 | 界面效果如下图 |
---|---|
![]() |
![]() |
项目实现步骤:
1)新建工程,选择有一个Activity,默认名称为MainActivity,默认布局为activity_main.xml;
2)新建一个item样式。文件名为layout_list_item.xml,示例代码如下:
<?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"
android:padding="10dp">
<ImageView
android:id="@+id/image"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginRight="10dp"
android:src="@mipmap/ic_launcher"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp"
android:textColor="#333333"
android:text="标题"/>
<TextView
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textColor="#666666"
android:text="内容"
android:layout_marginTop="5dp"/>
</LinearLayout>
</LinearLayout>
3)ListView的内容的展示,需要在适配器中补充。包括GridView、RecycleView也是如此,需要对应一个适配器。这就像iOS中UITableView的UITableViewDataSource。
新建ListAdapter文件,继承BaseAdapter。需要重写一些必要的方法,例如:getCount()、getView(int position, View convertView, ViewGroup parent)等。
item重用机制:借用ViewHolder类实现重用,优化性能。
示例代码如下:
package com.qiao.apple.listviewdemo;
import android.content.Context;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
public class ListAdapter extends BaseAdapter {
private Context mContext;
private LayoutInflater mLayoutInflater;
public ListAdapter(Context context) {
mContext = context;
mLayoutInflater = LayoutInflater.from(mContext);
}
@Override
public int getCount() {
return 10;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
static class ViewHolder {
public ImageView imageView;
public TextView title;
public TextView content;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (null == convertView) {
convertView = mLayoutInflater.inflate(R.layout.layout_list_item, null);
viewHolder = new ViewHolder();
viewHolder.imageView = convertView.findViewById(R.id.image);
viewHolder.title = convertView.findViewById(R.id.title);
viewHolder.content = convertView.findViewById(R.id.content);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
// viewHolder.imageView.setImageResource(R.mipmap.ic_launcher);
Glide.with(mContext)
.load(R.mipmap.ic_launcher_round)//加载默认图
.load("https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo_top_ca79a146.png")
.into(viewHolder.imageView);
viewHolder.title.setText("啦啦啦我是标题"+position);
viewHolder.content.setText("啦啦啦我是内容"+position);
return convertView;
}
}
4)补充activity_main.xml文件。添加一个ListView控件。
示例代码如下:
<?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"
xmlns:tools="http://schemas.android.com/tools">
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:dividerHeight="2dp"
android:listSelector="@drawable/list_selector_style"
/>
</LinearLayout>
5)补充MainActivity文件。获取刚刚创建的ListView控件,并绑定点击事件以及适配器。
示例代码如下:
public class MainActivity extends AppCompatActivity {
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = this.findViewById(R.id.list_view);
listView.setOnItemClickListener(new ListViewClick());
listView.setAdapter(new ListAdapter(MainActivity.this));
}
private class ListViewClick implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
Log.d("qiao", "当前点击数据position是:" + position);
Toast.makeText(MainActivity.this, "当前点击数据position是:" + position,
Toast.LENGTH_SHORT).show();
}
}
}
代码完成。
网友评论