RecyclerView已经取代了ListView和GridView,实现的功能 远远比它们强大
首先要到如依赖compile ‘com.android.support:recyclerview-v7:25.3.1’,将版本改成自己Studio的版本一、布局格式
//主方法的布局
<android.support.v4.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/onSwip">
<android.support.v7.widget.RecyclerView
android:id="@+id/onRecy"
android:layout_width="match_parent"
android:layout_height="match_parent"
></android.support.v7.widget.RecyclerView>
</android.support.v4.widget.SwipeRefreshLayout>
//第二个布局文件
<ImageView
android:id="@+id/onimg"
android:padding="5dp"
android:layout_width="100dp"
android:layout_height="100dp" />
<TextView
android:id="@+id/ontv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:textColor="#8000FF" />
二、重写适配器
public class MyAdapter extends RecyclerView.Adapter{
private Context context;
private HomePersonter homePersonter;
private List<HomeBean.ResultBean.DataBean> list = new ArrayList<>();
private ViewHolder viewHolder;
public MyAdapter(Context context){
this.context = context;
}
public void getPresenter(HomePersonter homePersonter){
this.homePersonter = homePersonter;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context,R.layout.images,null);
ViewHolder vholder = new ViewHolder(view);
return vholder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
viewHolder = (ViewHolder) holder;
viewHolder.ontv.setText(list.get(position).getTitle());
homePersonter.getImage(viewHolder.onimg,list.get(position).getThumbnail_pic_s());
}
@Override
public int getItemCount() {
return list.size();
}
public void getDate( List<HomeBean.ResultBean.DataBean> lists){
if (lists != null){
this.list = lists;
}
}
//优化的类
class ViewHolder extends RecyclerView.ViewHolder{
private final TextView ontv;
private final ImageView onimg;
public ViewHolder(View itemView) {
super(itemView);
ontv = (TextView) itemView.findViewById(R.id.ontv);
onimg = (ImageView) itemView.findViewById(R.id.onimg);
}
}
//上拉、下拉添加数据
public void AddHeaderItme(List<HomeBean.ResultBean.DataBean> list){
this.list.addAll(0,list);
notifyDataSetChanged();
}
public void AddFootItme(List<HomeBean.ResultBean.DataBean> list){
this.list.addAll(list);
notifyDataSetChanged();
}
}
三、添加分割线
public class MyDecoration extends RecyclerView.ItemDecoration {
private Context context;
public MyDecoration(Context context){
this.context = context;
}
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDraw(c, parent, state);
int count = parent.getChildCount();
for (int i = 0; i < count; i ++){
View view = parent.getChildAt(i);
int left = view.getLeft();
int right = view.getRight();
int top = view.getBottom()-10;
int bottom = view.getBottom();
Paint paint = new Paint();
paint.setColor(Color.RED);
c.drawRect(left,top,right,bottom,paint);
}
}
}
四、主方法实现
public class MainActivity extends AppCompatActivity implements IHomeInterface<HomeBean> {
// private ListView onLv;
private HomeAdapter adapter;
private HomePersonter homePersonter;
private MyAdapter myAdapter;
private RecyclerView onRecy;
private SwipeRefreshLayout onSwip;
private HomeBean homeBea;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//条目显示控件的ID
onRecy = (RecyclerView) findViewById(R.id.onRecy);
onSwip = (SwipeRefreshLayout) findViewById(R.id.onSwip);
initDate();
initView();
}
private void initDate() {
homePersonter = new HomePersonter();
homePersonter.attachView(this);
homePersonter.getHomeData(HomeBean.class);
//添加适配器
myAdapter = new MyAdapter(this);
myAdapter.getPresenter(homePersonter);
// 实现的事条目下的分割线
onRecy.addItemDecoration(new MyDecoration(this));
}
private void initView() {
//刷新时更变颜色
onSwip.setColorSchemeColors(Color.RED,Color.YELLOW,Color.GREEN,Color.BLUE,Color.CYAN);
//线性布局显示效果
LinearLayoutManager linearManager = new LinearLayoutManager(this);
//设置为一个3列的纵向网格布局
GridLayoutManager gridManager = new GridLayoutManager(MainActivity.this, 3, GridLayoutManager.VERTICAL, false);
//实现效果是瀑布流
int count = 3;
StaggeredGridLayoutManager staggerManager = new StaggeredGridLayoutManager(count,StaggeredGridLayoutManager.VERTICAL);
//设置布局管理器
onRecy.setLayoutManager(gridManager);
onRecy.setAdapter(myAdapter);
AddUpCount();
AddDomnCount();
}
//上拉刷新
public void AddUpCount(){
onSwip.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
List<HomeBean.ResultBean.DataBean> list = homeBea.getResult().getData();
if (list!=null){
myAdapter.AddHeaderItme(list);
//数据加载完毕后,关闭动画
onSwip.setRefreshing(false);
Toast.makeText(MainActivity.this,"数据上拉刷新",Toast.LENGTH_SHORT).show();
}
}
},3000);
}
});
}
//下拉加载
public void AddDomnCount(){
onRecy.setOnScrollListener(new RecyclerView.OnScrollListener() {
int last ;
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE && last+1 == myAdapter.getItemCount()){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
List<HomeBean.ResultBean.DataBean> list = homeBea.getResult().getData();
if (list!=null){
myAdapter.AddFootItme(list);
Toast.makeText(MainActivity.this,"数据下拉加载",Toast.LENGTH_SHORT).show();
}
}
},3000);
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
GridLayoutManager stat = (GridLayoutManager) recyclerView.getLayoutManager();
last = stat.findLastVisibleItemPosition();
}
});
}
//重写接口中的方法
@Override
public void callBacks(HomeBean homeBean) {
homeBea = homeBean;
myAdapter.getDate(homeBean.getResult().getData());
myAdapter.notifyDataSetChanged();
Log.i("MyActivity",""+homeBean);
}
}