加载更多
2013-11-29 23:51
417 查看
最近朋友打电话询问android应用中加载更多的功能,就抽时间写了一下。先说下原理:UI中有两个部分,一个就是信息listView,另一个就是信息下面的点击按钮->加载更多。信息部分初始化肯定是有一部分信息,点击按钮之后让信息刷新以加载更多,其实也没什么难点,一个内容实体类,一个内容适配器,上代码吧。
Main布局:
<LinearLayout 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"
android:orientation="vertical" >
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
加载更多的按钮我写的是另一个布局,他们不在一起,当然也可以在一起,走向目的地有很多条路,另一个就留给大家去写。
实体类我也贴出来吧:
/**
* 内容实体类
*
* @author wp
*
*/
public class Contexs {
String title, context;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
}
MainActivity:
public class MainActivity extends Activity implements OnScrollListener {
ListView listView;
int lastIndex = 0;// 最后一行的标志位
int visibleItemCount;// 可见项数目
int itemSize = 38;// 总数
View loadMoreView;
Button loadButton;
public static View view;
ItemAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view = getLayoutInflater().inflate(R.layout.list_item, null);
listView = (ListView) findViewById(R.id.list);
loadMoreView = LayoutInflater.from(this).inflate(R.layout.load_button,
null);
loadButton = (Button) loadMoreView.findViewById(R.id.but);
listView.addFooterView(loadMoreView);
List<Contexs> contexs = new ArrayList<Contexs>();
for (int i = 0; i < 10; i++) {
Contexs con = new Contexs();
con.setTitle("title" + i);
con.setContext("this is context" + i);
contexs.add(con);
}
adapter = new ItemAdapter(contexs);
listView.setAdapter(adapter);
listView.setOnScrollListener(this);
final Handler handler = new Handler();
loadButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
loadButton.setText("正在加载...");
handler.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
loadButton.setText("查看更多...");
loadMoreData();
adapter.notifyDataSetChanged();
}
}, 3000);
}
});
}
// 加载更多
private void loadMoreData() {
int count = adapter.getCount();
if (count + 10 <= itemSize) {
for (int i = count + 1; i <= count + 10; i++) {
Contexs con = new Contexs();
con.setTitle("title" + i);
con.setContext("this is context" + i);
adapter.addItem(con);
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
this.visibleItemCount = visibleItemCount;
lastIndex = firstVisibleItem + visibleItemCount - 1;
// 如果加载完成全部,则去掉按钮
if (totalItemCount == itemSize) {
listView.removeFooterView(loadMoreView);
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
}
最近鼠标有点问题,格式改起来有点累,不太一样的大家多包涵。
接下来,是适配器了,排版的顺序有点错了,大家理解最大:
Adapter:
public class ItemAdapter extends BaseAdapter {
List<Contexs> context;
public ItemAdapter(List<Contexs> context) {
this.context = context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return context.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return context.get(arg0);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
if (arg1 == null) {
arg1 = MainActivity.view;
}
TextView title = (TextView) arg1.findViewById(R.id.item_title);
title.setText(context.get(arg0).getTitle());
TextView con = (TextView) arg1.findViewById(R.id.item_context);
con.setText(context.get(arg0).getContext());
return arg1;
}
// 添加数据
public void addItem(Contexs conItem) {
context.add(conItem);
}
}
上面注释的也挺清楚,我就不多说什么了,这个难度也不是多大,还有一个,如果大家的功能是滑屏自动刷新的话,也没什么大的改动,布局中就没有加载更多了,然后 就是在onScrollListener中OnScorll和onScrollStateChanged中重写一下这些方法,道理一样的。希望以上的可以帮助刚刚入门的同僚,今晚就到这吧,有什么问题,欢迎大家多多评论。
Main布局:
<LinearLayout 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"
android:orientation="vertical" >
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
加载更多的按钮我写的是另一个布局,他们不在一起,当然也可以在一起,走向目的地有很多条路,另一个就留给大家去写。
实体类我也贴出来吧:
/**
* 内容实体类
*
* @author wp
*
*/
public class Contexs {
String title, context;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
}
MainActivity:
public class MainActivity extends Activity implements OnScrollListener {
ListView listView;
int lastIndex = 0;// 最后一行的标志位
int visibleItemCount;// 可见项数目
int itemSize = 38;// 总数
View loadMoreView;
Button loadButton;
public static View view;
ItemAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view = getLayoutInflater().inflate(R.layout.list_item, null);
listView = (ListView) findViewById(R.id.list);
loadMoreView = LayoutInflater.from(this).inflate(R.layout.load_button,
null);
loadButton = (Button) loadMoreView.findViewById(R.id.but);
listView.addFooterView(loadMoreView);
List<Contexs> contexs = new ArrayList<Contexs>();
for (int i = 0; i < 10; i++) {
Contexs con = new Contexs();
con.setTitle("title" + i);
con.setContext("this is context" + i);
contexs.add(con);
}
adapter = new ItemAdapter(contexs);
listView.setAdapter(adapter);
listView.setOnScrollListener(this);
final Handler handler = new Handler();
loadButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
loadButton.setText("正在加载...");
handler.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
loadButton.setText("查看更多...");
loadMoreData();
adapter.notifyDataSetChanged();
}
}, 3000);
}
});
}
// 加载更多
private void loadMoreData() {
int count = adapter.getCount();
if (count + 10 <= itemSize) {
for (int i = count + 1; i <= count + 10; i++) {
Contexs con = new Contexs();
con.setTitle("title" + i);
con.setContext("this is context" + i);
adapter.addItem(con);
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
this.visibleItemCount = visibleItemCount;
lastIndex = firstVisibleItem + visibleItemCount - 1;
// 如果加载完成全部,则去掉按钮
if (totalItemCount == itemSize) {
listView.removeFooterView(loadMoreView);
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
}
最近鼠标有点问题,格式改起来有点累,不太一样的大家多包涵。
接下来,是适配器了,排版的顺序有点错了,大家理解最大:
Adapter:
public class ItemAdapter extends BaseAdapter {
List<Contexs> context;
public ItemAdapter(List<Contexs> context) {
this.context = context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return context.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return context.get(arg0);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
if (arg1 == null) {
arg1 = MainActivity.view;
}
TextView title = (TextView) arg1.findViewById(R.id.item_title);
title.setText(context.get(arg0).getTitle());
TextView con = (TextView) arg1.findViewById(R.id.item_context);
con.setText(context.get(arg0).getContext());
return arg1;
}
// 添加数据
public void addItem(Contexs conItem) {
context.add(conItem);
}
}
上面注释的也挺清楚,我就不多说什么了,这个难度也不是多大,还有一个,如果大家的功能是滑屏自动刷新的话,也没什么大的改动,布局中就没有加载更多了,然后 就是在onScrollListener中OnScorll和onScrollStateChanged中重写一下这些方法,道理一样的。希望以上的可以帮助刚刚入门的同僚,今晚就到这吧,有什么问题,欢迎大家多多评论。
相关文章推荐
- android 代码实现控件之间的间距
- Android布局的小窍门?
- 解決Linux下Android开发真机调试设备不被识别问题
- Web布局连载——两栏固定布局(五)
- [Android]在代码里运行另一个程序的方法
- [软件咨询]WPS2012正式版已发布 金山Office移动版4.0发布
- Android笔记-Linux Kernel Ftrace (Function Trace)解析
- 一个简单的asp数据库操作类
- 样式表CSS布局经验
- 在线管理数据库 类
- c# 类和成员的修饰详细介绍
- 深入c# 类和结构的区别总结详解
- c#结构和类的相关介绍
- css网页布局中注意的几个问题小结
- DL.DT.DD实现左右的布局简单例子第1/2页
- 使用CSS框架布局的缺点和优点小结
- div+CSS网页布局的意义与副作用原因小结第1/2页
- android USB如何修改VID具体实现
- Android Mouse实现过程详细笔记
- 深入Android Browser配置管理的详解