gridview咩有listview的addfootview的属性 只能通过 scrollview来实现了 比较麻烦
main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ScrollView
android:id="@+id/sc"
android:layout_above="@+id/tv"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.su.testmyloadmoregrid.MyGridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="3" >
</com.su.testmyloadmoregrid.MyGridView>
<Button
android:layout_below="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="3"
android:id="@+id/moreButton"
android:text="更多" >
</Button>
</RelativeLayout>
</ScrollView>
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="100dip"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="证明下面还有控件" >
</TextView>
</RelativeLayout>
package com.su.testmyloadmoregrid;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.TextView;
public class MainActivity extends Activity {
private MyGridView mGridView;
private int page;
private com.su.testmyloadmoregrid.MainActivity.PaginationAdapter adapter;
private Button moreButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGridView = (MyGridView) findViewById(R.id.gridView);
loadData(page);
moreButton = (Button) findViewById(R.id.moreButton);
moreButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loadData(page);
}
});
}
private void loadData(int i) {
List<News> news = new ArrayList<News>();
int count = (i + 1) * 10;
for (i = count - 9; i <= count; i++) {
News items = new News();
items.setTitle("Title" + i);
items.setContent("This is News Content" + i);
news.add(items);
}
if (page == 0) {
adapter = new PaginationAdapter(news, this);
mGridView.setAdapter(adapter);
} else {
adapter.addNewsItems(news);
}
// 这里只是假设23是服务器返回的数据总数 如果计算的count大于23了 那么就不用显示加载更多按钮了.
if (count > 23) {
moreButton.setVisibility(View.GONE);
}
page++;
}
class PaginationAdapter extends BaseAdapter {
List<News> newsItems;
Context context;
public PaginationAdapter(List<News> newsitems, Context context) {
this.newsItems = newsitems;
this.context = context;
}
@Override
public int getCount() {
return newsItems.size();
}
@Override
public Object getItem(int position) {
return newsItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
if (view == null) {
view = ((Activity) context).getLayoutInflater().inflate(
R.layout.list_item, null);
}
// 新闻标题
TextView tvTitle = (TextView) view.findViewById(R.id.newstitle);
tvTitle.setText(newsItems.get(position).getTitle());
// 新闻内容
TextView tvContent = (TextView) view.findViewById(R.id.newscontent);
tvContent.setText(newsItems.get(position).getContent());
return view;
}
/**
* 添加数据列表项 调用notifychanged就可以刷新listview了
*
* @param newsitem
*/
public void addNewsItem(News newsitem) {
newsItems.add(newsitem);
notifyDataSetChanged();
}
/**
* 添加数据列表 调用notifychanged就可以刷新listview了
*
* @param newsitem
*/
public void addNewsItems(List<News> newsitems) {
newsItems.addAll(newsitems);
Log.e("test", newsItems.size() + "");
notifyDataSetChanged();
}
}
}
gridview需要重写一下
package com.su.testmyloadmoregrid;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View.MeasureSpec;
import android.widget.GridView;
public class MyGridView extends GridView {
public MyGridView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public MyGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(
Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}