package com.accesscompany.testlistadapter;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.UnderlineSpan;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.LinearLayout.LayoutParams;
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
/**
* 设置布局显示属性
*/
private LayoutParams mLayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
/**
* 设置布局显示目标最大化属性
*/
private LayoutParams FFlayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT);
private ProgressBar progressBar;
// My Adapter, based on BaseAdapter
private MyListAdapter mAdapter = null;
private int lastItem = 0;
LinearLayout loadingLayout;
ListView mainList;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView we = (TextView) findViewById(R.id.wen);
SpannableStringBuilder style = new SpannableStringBuilder("谢红霞");
style.setSpan(new UnderlineSpan(), 0, 3,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
we.setText(style);
LinearLayout layout = new LinearLayout(this);
// 设置布局 水平方向
layout.setOrientation(LinearLayout.HORIZONTAL);
// 进度条
progressBar = new ProgressBar(this);
// 进度条显示位置
progressBar.setPadding(0, 0, 15, 0);
// 把进度条加入到layout中
// layout.addView(progressBar, mLayoutParams);
// 文本内容
TextView textView = new TextView(this);
textView.setText("展开更多");
textView.setGravity(Gravity.CENTER);
textView.setPadding(100, 10, 0, 20);
textView.setTextColor(Color.BLUE);
textView.setTextSize(20);
// 把文本加入到layout中
layout.addView(textView, FFlayoutParams);
// 设置layout的重力方向,即对齐方式是
layout.setGravity(Gravity.CENTER);
// 设置ListView的页脚layout
loadingLayout = new LinearLayout(this);
loadingLayout.addView(layout, mLayoutParams);
loadingLayout.setGravity(Gravity.CENTER);
loadingLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/*
* if (adapter.count<=41) { adapter.count += 10;
* adapter.notifyDataSetChanged();
*
* }
*/
if (mAdapter.mData.size() < 50) {
for (int i = 0; i < 10; i++) {
MyListItem list_item = new MyListItem();
list_item.setTitle("商家XXX" + i);
list_item.setText("XXXXXXXXXX街道XXX楼" + i);
mAdapter.addItem(list_item);
}
mAdapter.notifyDataSetChanged();
} else {
mainList.removeFooterView(loadingLayout);
}
}
});
mAdapter = new MyListAdapter();
for (int i = 0; i < 10; i++) {
MyListItem list_item = new MyListItem();
list_item.setTitle("title" + i);
list_item.setText("text" + i);
mAdapter.addItem(list_item);
}
mainList = (ListView) findViewById(R.id.mainlist);
mainList.addFooterView(loadingLayout);
mainList.setAdapter(mAdapter);
mainList.setOnScrollListener(new OnScrollListener() {
public void onScroll(AbsListView v, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
Log.i(TAG, "Scroll>>>first: " + firstVisibleItem
+ ", visible: " + visibleItemCount + ", total: "
+ totalItemCount);
lastItem = firstVisibleItem + visibleItemCount - 1;
Log.i(TAG, "Scroll>>>lastItem:" + lastItem);
// 显示50条ListItem,即0-49,因为onScroll是在“滑动”执行过之后才触发,所以用adapter.count<=41作条件
/*
* if (adapter.count<=41) { if
* (firstVisibleItem+visibleItemCount==totalItemCount) {
* adapter.count += 10; adapter.notifyDataSetChanged();
* listView.setSelection(lastItem); int
* currentPage=adapter.count/10;
* Toast.makeText(getApplicationContext(), "第"+currentPage+"页",
* Toast.LENGTH_LONG).show(); } } else {
* listView.removeFooterView(loadingLayout); }
*/
}
@Override
public void onScrollStateChanged(AbsListView v, int state) {
if (lastItem == mAdapter.mData.size()
&& state == OnScrollListener.SCROLL_STATE_IDLE) {
/*
* Log.i(TAG,"ScrollStateChanged>>>state:"+state+"lastItem:"
* + lastItem);
* //显示50条ListItem,即0-49,因为onScrollStateChanged是在
* “拖动滑动”执行过之后才触发,所以用adapter.count<=41作条件 if
* (adapter.count<=41) { adapter.count += 10;
* adapter.notifyDataSetChanged();
*
* }else{ listView.removeFooterView(loadingLayout); }
*/
}
}
});
}
private OnClickListener listenBtnListener = new OnClickListener() {
public void onClick(View v) {
Log.i(TAG, "Clicked view: " + v + ", parent: " + v.getParent());
ViewHolder vh = (ViewHolder) ((View) v.getParent()).getTag();
AlertDialog.Builder ad = new AlertDialog.Builder(MainActivity.this);
ad.setTitle("Listen button clicked");
ad.setMessage("The " + vh.position + " listen button clicked");
ad.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Log.i(TAG, "Listen button click dialog disposing...");
}
});
ad.show();
}
};
private OnClickListener downloadBtnListener = new OnClickListener() {
public void onClick(View v) {
Log.i(TAG, "Clicked view: " + v + ", parent: " + v.getParent());
ViewHolder vh = (ViewHolder) ((View) v.getParent()).getTag();
AlertDialog.Builder ad = new AlertDialog.Builder(MainActivity.this);
ad.setTitle("Download button clicked");
ad.setMessage("The " + vh.position + " download button clicked");
ad.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Log.i(TAG, "Download button click dialog disposing...");
}
});
ad.show();
}
};
private class MyListAdapter extends BaseAdapter {
private ArrayList<MyListItem> mData = new ArrayList<MyListItem>();
private LayoutInflater mInflater;
public MyListAdapter() {
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void addItem(MyListItem item) {
mData.add(item);
notifyDataSetChanged();
}
@Override
public int getCount() {
return mData.size();
}
@Override
public MyListItem getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.i(TAG, "getView " + position + " " + convertView + "; parent: "
+ parent);
ViewHolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.listitem_layout, null);
holder = new ViewHolder();
holder.tvTitle = (TextView) convertView
.findViewById(R.id.itemTitle);
holder.tvText = (TextView) convertView
.findViewById(R.id.itemText);
holder.btnDownload = (TextView) convertView
.findViewById(R.id.btnDownload);
holder.position = position;
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tvTitle.setText(mData.get(position).getTitle());
holder.tvText.setText(mData.get(position).getText());
holder.btnDownload.setText("不完整");
return convertView;
}
}
public class ViewHolder {
public TextView tvTitle;
public TextView tvText;
public TextView btnDownload;
public int position;
}
}
package com.accesscompany.testlistadapter;
public class MyListItem {
private String title = null;
private String text = null;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/RelativeLayout01"
android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="100dip">
<TextView android:text="TextView01" android:layout_height="wrap_content"
android:textSize="18dip" android:textStyle="bold"
android:layout_marginLeft="13dip" android:layout_marginTop="10dip"
android:textColor="@color/blue" android:layout_width="200dip"
android:id="@+id/itemTitle" />
<TextView android:text="TextView02" android:textColor="@color/black"
android:textSize="18dip" android:layout_height="wrap_content"
android:layout_marginBottom="10dip"
android:paddingBottom="10dip"
android:layout_marginLeft="13dip"
android:layout_width="200dip" android:layout_below="@+id/itemTitle"
android:id="@+id/itemText" />
<TextView android:layout_width="60dip" android:layout_height="wrap_content"
android:id="@+id/btnDownload" android:layout_alignParentRight="true"
android:layout_centerVertical="true" android:focusable="false"
android:textColor="@color/black"
android:scaleType="fitCenter" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:background="@drawable/transparent_background"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout android:layout_width="wrap_content"
android:orientation="horizontal" android:layout_height="50dip">
<TextView android:text="重新定位" android:layout_width="220dip"
android:textColor="@color/blue" android:textSize="20dip"
android:paddingLeft="5dip" android:paddingTop="5dip"
android:layout_height="wrap_content" />
<TextView android:text="新建商家" android:layout_width="wrap_content"
android:id="@+id/wen"
android:layout_height="wrap_content" android:textColor="@color/blue"
android:textSize="20dip" android:paddingLeft="5dip"
android:paddingTop="5dip" android:layout_alignParentRight="true" />
</LinearLayout>
<LinearLayout android:layout_width="wrap_content"
android:orientation="horizontal" android:layout_height="50dip">
<EditText android:layout_width="200dip"
android:layout_marginLeft="20dip" android:id="@+id/at"
android:textColor="@color/black" android:textSize="20dip"
android:paddingLeft="5dip" android:paddingTop="5dip"
android:layout_height="wrap_content" />
<Button android:text="搜索" android:layout_width="80dip"
android:layout_height="wrap_content" android:textColor="@color/black"
android:textSize="20dip" android:paddingLeft="5dip"
android:paddingTop="5dip" android:layout_alignParentRight="true" />
</LinearLayout>
<ListView android:layout_width="wrap_content"
android:layout_height="300dip" android:cacheColorHint="#00000000"
android:divider="#000000" android:dividerHeight="1px"
android:stretchMode="columnWidth" android:id="@+id/mainlist">
</ListView>
<TextView android:text="选项" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:textColor="@color/blue"
android:textSize="20dip" android:paddingLeft="235dip"
android:paddingTop="15dip" android:layout_alignParentRight="true" />
</LinearLayout>
分享到:
相关推荐
在实际项目中,开发者可能会遇到各种复杂场景,如异步加载数据、处理点击事件、优化性能等,这些都需要结合ListView的源码进行深入分析和解决。通过不断实践和学习,开发者能逐步成为Android开发的高手。
ListView控件是Android开发中非常常见的一种视图组件,它用于展示大量的数据列表,具有高度可定制性和灵活性。本教程将深入探讨ListView的高级用法,帮助开发者创建出界面美观且功能丰富的应用。 1. **自定义适配器...
YOLOv8-PyQt5-GUI-pred-insects-mytwu_995识别和分类昆虫种类-检测生态研究和害虫防治+数据集+训练好的模型包含pyqt可视化界面,有使用教程 1. 内部包含标注好的目标检测数据集,分别有yolo格式(txt文件)和voc格式标签(xml文件), 共995张图像, 已划分好数据集train,val, test,并附有data.yaml文件可直接用于yolov5,v8,v9,v10,v11,v12等算法的训练; 2. yolo目标检测数据集类别名:insects(昆虫),包括 army_worm(行军虫)、legume_blister_beetle(豆类起泡叶甲)、red_spider(红蜘蛛)、rice_gall_midge(水稻瘿蚊)、rice_leaf_roller(水稻卷叶螟)、rice_leafhopper(水稻飞虱)、rice_water_weevil(水稻水象甲)、wheat_phloeothrips(小麦皮层蓟马)、white_backed_plant_hopper(白背飞虱)、yellow_rice_borer(水稻二化螟)等 3. yolo项目用途:识别和分类昆虫种类,用于生态研究和害虫防治 4. 可视化参考链接:https://blog.csdn.net/weixin_51154380/article/details/126395695?spm=1001.2014.3001.5502
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
内容概要:本文详细介绍了如何利用MATLAB进行函数曲线图像的数据提取、复现重绘及后处理的方法。主要内容涵盖数据准备与导入、数据提取与预处理、图像复现与重绘、图像修改与后处理四个主要阶段。文中强调了程序编写的清晰性和注释的详尽性,确保即使是不熟悉MATLAB编程的用户也能快速理解和修改代码。此外,本文特别指出该服务不含曲线拟合、公式提取及FFT频谱分析等高级分析功能,但能在10分钟内快速出图,提供实惠的价格和服务质量。 适合人群:科研人员、工程师及其他需要进行数据可视化工作的专业人士,尤其是那些希望快速掌握MATLAB绘图技巧的新手。 使用场景及目标:适用于需要将原始图像数据转换为高质量函数曲线图像的各种应用场景,如实验数据分析、工程报告制作等。目标是在短时间内获得精确、美观的图表,同时提高工作效率。 其他说明:本文提供的方法和技术可以帮助用户更好地理解和应用MATLAB的基础绘图功能,为进一步深入学习打下坚实基础。虽然目前不涉及复杂的数学建模或信号处理技术,但对于大多数日常的数据可视化任务来说已经足够强大。
移动通信复习资料全部答案.docx
内容概要:本文详细介绍了Lanelet2高精地图的解析方法及其在全球路径规划中的应用。首先解释了Lanelet2作为当前主流高精度地图格式之一的特点,特别是它对车道、交通规则等元素的数据结构化表示方式。接着展示了如何利用Python和C++代码片段来加载和处理Lanelet2格式的地图,包括正确设置投影参数、遍历车道以及处理特定类型的车道(如左转车道)。然后深入探讨了全局路径规划的具体实现步骤,强调了选择合适搜索半径的重要性,并分享了一些实际项目中遇到的问题及解决方案,如坐标系转换错误导致的地图偏移、断头路引发的死循环等问题。最后提醒开发者注意地图制作过程中的常见陷阱,建议使用手动可视化工具进行细致检查。 适用人群:从事自动驾驶相关领域的工程师和技术爱好者,尤其是那些需要理解和使用Lanelet2高精地图进行开发的人群。 使用场景及目标:帮助读者掌握Lanelet2高精地图的基本概念和关键技术点,能够独立完成从地图加载到全局路径规划的一系列任务,避免常见的开发误区。 其他说明:文中提供的实例代码和实践经验对于初学者来说非常有价值,有助于快速入门并应用于实际项目中。
第3章客户关系管理软件系统.ppt
使用GD32F303芯片作为主控MCU,通过PB3输出1秒周期的高低电平点亮LED灯
电子商务网站建设试题二及答案.docx
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
内容概要:本文探讨了行星齿轮系统的非线性求解及其与齿轮动力学和非线性动力学的关系。首先介绍了齿轮动力学的基础概念,包括基本方程和各参数的意义。接着详细解释了行星齿轮系统中存在的非线性因素,特别是时变啮合刚度这一重要特征,并通过Python代码进行了模拟展示。最后,文章展示了如何应用Runge-Kutta方法和其他数值解法来解决含有非线性因素的行星齿轮动力学问题,强调了这类研究对于机械系统优化设计的重要意义。 适合人群:从事机械工程领域的研究人员和技术人员,尤其是关注行星齿轮系统动态特性的专业人士。 使用场景及目标:适用于需要深入了解行星齿轮非线性行为的研究项目或工程项目,旨在提高对行星齿轮系统复杂动力学特性的认识,从而改进设计和提升可靠性。 其他说明:文中提供了具体的Python代码实例用于演示关键概念,有助于读者更直观地理解理论知识并应用于实际工作中。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
内容概要:本文全面解析了Python网络爬虫框架Scrapy。首先介绍了Scrapy的基本概念、特点及其与Requests+BeautifulSoup的区别,强调Scrapy更适合生产级别的爬虫项目,特别是需要高并发、分布式、持久化存储的场景。接着详细阐述了Scrapy的架构组件,包括Scrapy Engine、Scheduler、Downloader、Spiders、Item Pipeline等,并解释了各组件的功能及相互关系。随后讲解了Scrapy的安装与项目创建过程,包括环境准备、项目结构、创建和运行第一个Spider。文章还深入探讨了核心组件如Spider、Item、Item Pipeline、Downloader Middleware和Spider Middleware的具体实现与应用场景。此外,介绍了选择器(CSS和XPath)的使用技巧以及数据清洗方法。高级技巧部分涵盖了登录处理、JavaScript渲染页面的解决方案、分布式爬虫的实现以及性能优化策略。最后,通过实战案例展示了如何构建电商网站商品爬虫和新闻网站爬虫,同时提供了Scrapy的部署与监控方法,包括使用ScrapyD、Prometheus+Grafana等工具。; 适合人群:具备一定Python编程基础,对网络爬虫感兴趣的开发者,尤其是希望构建高效、稳定、可扩展爬虫系统的工程师。; 使用场景及目标:①理解Scrapy框架的工作原理及其优势;②掌握Scrapy的安装配置、项目创建及各组件的具体使用;③学习如何处理复杂的网页结构和动态加载的内容;④实现高并发、分布式爬虫并进行有效的性能优化;⑤部署和监控爬虫系统,确保其稳定运行。; 其他说明:本文不仅提供了理论知识,还包含了大量的代码示例和实战经验分享,帮助读者快速上手Scrapy并应用于实际项目中。此外,文中还提及了Scrapy的最佳实践、常见问题解决方法以及未来发展方向,为深入学习和研究提供了丰富的资源。
内容概要:本文介绍了PLC(Programmable Logic Controller)在电网备用电源自动投入系统中的应用,重点讨论了双电源切换组态的具体实现方法。文章首先阐述了双电源切换组态的基本原理,然后详细解析了梯形图接线图原理图、IO分配和组态画面的设计。最后,通过实际应用中的代码分析,展示了如何通过合理的程序设计来确保系统的稳定性和可靠性。 适合人群:从事电力系统自动化领域的工程师和技术人员,尤其是对PLC编程和双电源切换感兴趣的读者。 使用场景及目标:适用于希望深入了解PLC在电力系统中具体应用的技术人员,帮助他们掌握双电源切换组态的设计和实现方法,提升系统的稳定性和可靠性。 其他说明:文中提供了详细的梯形图接线图原理图、IO分配和组态画面展示,有助于读者更好地理解和实践相关技术。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
含多规格接触对的电连接器贮存寿命评估.zip