ListView示例
- 效果图
- 代码部分
- ListViewActivity(显示ListView的Activity)
- 相对应的xml文件(activity_list_view.xml)
- MyData数据源
- MyAdapter适配器类
- 单个View条目xml(list_view_adapter.xml)
- 加载进度所需要的进度条(storage_bar.xml)
- 下载项目源码
效果图
代码部分
ListViewActivity(显示ListView的Activity)
代码语言:javascript
复制package com.gaojc.activity;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import com.gaojc.adapter.MyAdapter;
import com.gaojc.data.MyData;
import com.gaojc.text.R;
import java.util.ArrayList;
public class ListViewActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view);
ListView myListView = findViewById(R.id.myListView);
// 创建数据源
ArrayList<MyData> myData = new ArrayList<>();
// 适配器类(用来给ListView填充数据)
MyAdapter myAdapter = new MyAdapter(ListViewActivity.this,myData);
/**
* 添加假数据
*/
for (int i = 0; i < 15; i ) {
myAdapter.add(new MyData(0.1 i "",10 i "%"));
}
// 设置创建生成的数据适配器
myListView.setAdapter(myAdapter);
}
}
相对应的xml文件(activity_list_view.xml)
代码语言:javascript
复制<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.gaojc.activity.ListViewActivity"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="ListView示例"
android:gravity="center"
android:textSize="30dp"/>
<ListView
android:id="@ id/myListView"
android:layout_width="300dp"
android:layout_height="450dp"
android:layout_gravity="center"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="15dp"
android:paddingBottom="20dp"
android:divider="@null"
android:dividerHeight="5dp"
android:background="@drawable/every_day_get_money_bg1"/>
</FrameLayout>
ListView属性介绍
代码语言:javascript
复制android:divider="@null" :不显示分割线
android:dividerHeight="5dp" :指定分割线的高
android:scrollbars="none" :隐藏滚动条
MyData数据源
代码语言:javascript
复制package com.gaojc.data;
public class MyData {
public String money; //显示金额
public String ratio; //比例
public MyData(String money, String ratio) {
this.money = money;
this.ratio = ratio;
}
public String getRatio() {
return ratio;
}
}
MyAdapter适配器类
代码语言:javascript
复制package com.gaojc.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.gaojc.data.MyData;
import com.gaojc.text.R;
import com.gaojc.text.Utils.LogUtil;
import java.util.ArrayList;
/**
* 适配器类(用来给ListView填充数据)
* 需要继承 BaseAdapter
*/
public class MyAdapter extends BaseAdapter {
public Context context;
public ArrayList<MyData> myData;
public MyAdapter(Context context, ArrayList<MyData> myData) {
this.context = context;
this.myData = myData;
}
/**
* @return:要绑定的条目的数目(格子的数量)
*/
@Override
public int getCount() {
return myData.size();
}
/**
* 根据索引(位置)获得该位置的对象
* @param i:索引
* @return:获取该位置的对象
*/
@Override
public MyData getItem(int i) {
// 这里的返回类型改为自己的数据类
return myData.get(i);
}
/**
* @return: 返回条目的id
*/
@Override
public long getItemId(int i) {
return i;
}
/**
* 获取该条目要显示的界面
* @param i:当前条目
* @param convertView:绘制好的视图
* @param viewGroup:对应的xml文件(单个条目 list_view_adapter.xml)
* @return
*/
@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
MyData myData = getItem(i); //获取当前位置的对象
View view;
ViewHolder viewHolder;
if (convertView == null) {
// 把xml布局文件解析成View
view = LayoutInflater.from(context).inflate(R.layout.list_view_adapter, viewGroup, false);
// 添加数据 setTag:监听相对应的事件
viewHolder = new ViewHolder();
viewHolder.textMoney = view.findViewById(R.id.textMoney);
viewHolder.textMoneyTwo = view.findViewById(R.id.textMoneyTwo);
viewHolder.listViewProBar = view.findViewById(R.id.listViewProBar);
viewHolder.ratio = view.findViewById(R.id.ratio);
viewHolder.getButton = view.findViewById(R.id.getButton);
view.setTag(viewHolder);
} else {
view = convertView;
viewHolder = (ViewHolder) view.getTag(); //重新获取ViewHolder
}
viewHolder.getButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LogUtil.e("点击了领取按钮");
// 获取比例
String ratio = myData.getRatio();
LogUtil.e("比例是:" ratio);
if (ratio.equals("100%")) {
Toast.makeText(context, "可以提现", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "不能提现", Toast.LENGTH_SHORT).show();
}
}
});
// 设置各节点内容
viewHolder.textMoney.setText(myData.money "元");
viewHolder.textMoneyTwo.setText(myData.money "元奖励进度");
String ratio = myData.ratio.replace("%", "");
viewHolder.listViewProBar.setProgress(Integer.parseInt(ratio));
viewHolder.ratio.setText(myData.ratio);
return view;
}
// 需要的数据
private class ViewHolder {
TextView textMoney; //红包金额
TextView textMoneyTwo; //金额奖励进度
ProgressBar listViewProBar; //进度比例
TextView ratio; //显示的进度比例数
Button getButton; //领取按钮
}
// 添加数据方法
public void add(MyData data){
if (myData == null){
myData = new ArrayList<>();
}
myData.add(data);
}
}
单个View条目xml(list_view_adapter.xml)
代码语言:javascript
复制<?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="60dp"
android:background="@drawable/every_day_get_money_listview_item_background">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="2.5"
android:background="@drawable/red_package"/>
<TextView
android:id="@ id/textMoney"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:text="0.3元"
android:background="@drawable/red_package_2"
android:gravity="center"
android:textColor="#FF0000"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:orientation="vertical">
<TextView
android:id="@ id/textMoneyTwo"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="0.3元奖励进度"
android:gravity="center"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginBottom="5dp">
<ProgressBar
android:id="@ id/listViewProBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/progress_bg"
android:progress="60"
android:progressDrawable="@drawable/storage_bar" />
<TextView
android:id="@ id/ratio"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="60%"
android:gravity="center"
android:textColor="#FFFFFF"/>
</FrameLayout>
</LinearLayout>
<Button
android:id="@ id/getButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.1"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:background="@drawable/receive"/>
</LinearLayout>
加载进度所需要的进度条(storage_bar.xml)
代码语言:javascript
复制<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 绿色进度条-->
<item
android:id="@android:id/progress">
<scale
android:scaleWidth="100%">
<shape>
<corners android:radius="15dip"/>
<solid android:color="#66CC08"/>
</shape>
</scale>
</item>
</layer-list>
下载项目源码