RecyclerView替代listview

RecyclerView是一个比ListView更灵活的一个控件,以后可以直接抛弃ListView了。可以 代替Gridview,实现瀑布流等功能的强大之处。

1.listview的实现

2.Gridview的实现

3.瀑布流的实现

代码的编写:

(1) 可以实现 listview效果 和Gridvie的效果同菜单键来切换效果 
主activity
public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {
//RecyclerView
//为什么叫做RecyclerView 1.不关心 item是否显示在正确的位置,如何显示 2.不关心item间如何分隔 3.不关心item增加与删除的动画效果 4.仅仅关注如何回收与服用view
//如何控制RecyclerView的风格 需要 使用Lauoutmanager来管理 如何设置item间的分隔效果 使用ItemDecoreation来设置分隔效果 使用ItemAnimator来设置item增加与删除的效果
//RecyclerView 的相关的重要类(强制我们开发者 使用viewholder模式) Adapter viewholder LayoutManger(设置显示风格) ItenmDecoreation(设置分割线) ItemAnimator(设置增加删除效果)
//RecyclerView能干什么?1.像listview一样显示 2.像gridview一样显示 3.横向listview显示 4.横向Gridview显示 5.瀑布流 6.定制Item增加与删除动画
RecyclerView recyclerView;

private List<String> list;
Mysimpleadpater adpater;
SwipeRefreshLayout swipeRefreshLayout;
/**
* ATTENTION: This was auto-generated to implement the App Indexing API.
* See https://g.co/AppIndexing/AndroidStudio for more information.
*/
private GoogleApiClient client;

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initda();
ininview();
adpater = new Mysimpleadpater(this, list);
recyclerView.setAdapter(adpater);
//设置recyclerview的布局管理
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,
LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
adpater.setOnItemClickListener(new Mysimpleadpater.OnItemClickListener() {
@Override
public void onItemClick(View view, int pos) {
Toast.makeText(MainActivity.this, pos + "", Toast.LENGTH_LONG).show();
}

@Override
public void onItemLong(View view, int pos) {
Toast.makeText(MainActivity.this, pos + "", Toast.LENGTH_LONG).show();
}
});
//设置recylcerview的item的间距分割线
//recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
}

private void initda() {
list = new ArrayList<String>();
for (int i = 'A'; i < 'Z'; i++) {
list.add((char) i + "");

}
}

private void ininview() {
// TODO Auto-generated method stub
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.shuaixn);
if (swipeRefreshLayout != null)
swipeRefreshLayout.setColorSchemeResources(
R.color.colorAccent,
R.color.colorAccent,
R.color.colorAccent,
R.color.colorAccent
);
swipeRefreshLayout.setOnRefreshListener(this);
}
public void onRefresh() {
swipeRefreshLayout.setRefreshing(false);

}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.add:
adpater.addDate(adpater.getItemCount()
);
break;
case R.id.delete:
adpater.deleteDate(1);
break;
case R.id.listview:
recyclerView.setLayoutManager(new LinearLayoutManager(this));
break;
case R.id.gridview:
recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
break;
case R.id.gridview_h:
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(8, StaggeredGridLayoutManager.HORIZONTAL));
break;
case R.id.staggered:
startActivity(new Intent(this, staggactivity.class));
break;


}
return super.onOptionsItemSelected(item);
}

@Override
public void onStart() {
super.onStart();

// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
client.connect();
Action viewAction = Action.newAction(
Action.TYPE_VIEW, // TODO: choose an action type.
"Main Page", // TODO: Define a title for the content shown.
// TODO: If you have web page content that matches this app activity's content,
// make sure this auto-generated web page URL is correct.
// Otherwise, set the URL to null.
Uri.parse("http://host/path"),
// TODO: Make sure this auto-generated app URL is correct.
Uri.parse("android-app://com.example.zmh.myrecylcerview/http/host/path")
);
AppIndex.AppIndexApi.start(client, viewAction);
}

@Override
public void onStop() {
super.onStop();

// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
Action viewAction = Action.newAction(
Action.TYPE_VIEW, // TODO: choose an action type.
"Main Page", // TODO: Define a title for the content shown.
// TODO: If you have web page content that matches this app activity's content,
// make sure this auto-generated web page URL is correct.
// Otherwise, set the URL to null.
Uri.parse("http://host/path"),
// TODO: Make sure this auto-generated app URL is correct.
Uri.parse("android-app://com.example.zmh.myrecylcerview/http/host/path")
);
AppIndex.AppIndexApi.end(client, viewAction);
client.disconnect();
}
}

适配器(不是baseadpater  是Adpater)
public class Mysimpleadpater extends RecyclerView.Adapter<myviewholder> {

private LayoutInflater inflater;
private Context mconContext;
private List<String> list;

public Mysimpleadpater(Context context, List<String> list) {
this.mconContext = context;
this.list = list;
inflater = LayoutInflater.from(mconContext);
}

public interface OnItemClickListener {
void onItemClick(View view, int pos);

void onItemLong(View view, int pos);
}


private OnItemClickListener onItemClickListener;

public void setOnItemClickListener(OnItemClickListener listener) {
this.onItemClickListener = listener;
}

@Override
public int getItemCount() {
// TODO Auto-generated method stub
return list.size();
}

public void onBindViewHolder(final myviewholder holder, final int arg1) {
//回调该方法
// TODO Auto-generated method stub
holder.text.setText(list.get(arg1));
//onclick
show(holder);
}

public void show(final myviewholder holder) {
if (this.onItemClickListener != null) {
holder.text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int layoutPosition = holder.getLayoutPosition();
onItemClickListener.onItemClick(holder.itemView, layoutPosition);
}
});
//longclick
holder.text.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int layoutPosition = holder.getLayoutPosition();
onItemClickListener.onItemLong(holder.itemView, layoutPosition);
return false;
}
});
}
}

@Override
public myviewholder onCreateViewHolder(ViewGroup arg0, int arg1) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.item, arg0, false);
myviewholder viewMyviewholder = new myviewholder(view);
return viewMyviewholder;
}

public void addDate(int pos) {
list.add(pos, "wo add");
notifyItemInserted(pos);
}

public void deleteDate(int pos) {
list.remove(pos);
notifyItemRemoved(pos);
}

}

class myviewholder extends ViewHolder {
TextView text;

public myviewholder(View arg0) {
super(arg0);
text = (TextView) arg0.findViewById(R.id.text);
}
}

菜单的编写(通过菜单键来切换recycleview的效果
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/add"
android:orderInCategory="100"
android:icon="@drawable/ic_menu_add"
android:title="add"></item>
<item
android:id="@+id/delete"
android:orderInCategory="100"
android:icon="@drawable/ic_menu_add"
android:title="delete"></item>
<item
android:id="@+id/listview"
android:orderInCategory="100"
android:title="listview"></item>
<item
android:id="@+id/gridview"
android:orderInCategory="100"
android:title="gridview"></item>
<item
android:id="@+id/gridview_h"
android:orderInCategory="100"
android:title="gridview_h"></item>
<item
android:id="@+id/staggered"
android:orderInCategory="100"
android:title="staggered"></item>


</menu>)
(2)瀑布流的实现
重新创建一个activitypackage com.example.zmh.myrecylcerview;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import java.util.ArrayList;
import java.util.List;

public class staggactivity extends AppCompatActivity {

RecyclerView recyclerView;

private List<String> list;
staggaptaer adpater;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initda();
ininview();
adpater = new staggaptaer(this, list);
recyclerView.setAdapter(adpater);
adpater.setOnItemClickListener(new Mysimpleadpater.OnItemClickListener() {
@Override
public void onItemClick(View view, int pos) {

}
@Override
public void onItemLong(View view, int pos) {
adpater.deleteDate(pos);

}
});

//设置recyclerview的布局管理

StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);

recyclerView.setLayoutManager(staggeredGridLayoutManager);


//设置recylcerview的item的间距分割线
//recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
}

private void initda() {
list = new ArrayList<String>();
for (int i = 'A'; i < 'Z'; i++) {
list.add((char) i + "");

}

}

private void ininview() {
// TODO Auto-generated method stub
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.listview:
recyclerView.setLayoutManager(new LinearLayoutManager(this));
break;
case R.id.gridview:
recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
break;
case R.id.gridview_h:
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(8, StaggeredGridLayoutManager.HORIZONTAL));
break;
case R.id.staggered:
break;


}
return super.onOptionsItemSelected(item);
}
}
瀑布流的适配器
package com.example.zmh.myrecylcerview;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.ViewGroup;

import java.util.ArrayList;
import java.util.List;

public class staggaptaer extends Mysimpleadpater {

private LayoutInflater inflater;
private Context mconContext;
private List<String> list;
private List<Integer> hegihtlist;

public staggaptaer(Context context, List<String> list) {
super(context, list);
this.mconContext = context;
this.list = list;
inflater = LayoutInflater.from(mconContext);
hegihtlist = new ArrayList<Integer>();
for (int i = 0; i < list.size(); i++) {
hegihtlist.add((int) (100 + Math.random() * 300));
}
}

public void onBindViewHolder(myviewholder holder, int arg1) {
// TODO Auto-generated method stub

ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();
lp.height = hegihtlist.get(arg1);
holder.itemView.setLayoutParams(lp);
holder.text.setText(list.get(arg1));
show(holder);
}

}



这些就是recycleview 实现listview,gridview,瀑布流的代码编写,代码里面还编写了recycleview的增加与删除功能



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值