在app.gradle中添加依赖:compile 'in.srain.cube:ultra-ptr:1.0.11' //下拉刷新
布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:gravity="center" android:layout_height="match_parent"> <in.srain.cube.views.ptr.PtrFrameLayout android:id="@+id/mPtrFrame" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_View" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView> </in.srain.cube.views.ptr.PtrFrameLayout> </LinearLayout>
逻辑处理:
public class RxJavaActivity extends AppCompatActivity { private BootstrapButton login , exit; private AlertDialogUtils utils; private PtrFrameLayout ptrFrame; //下拉刷新 //private TextView textView; //private ListView listView; List<Reception> listData = new ArrayList<>(); private RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rx_java); initData(); } public void initData(){ /*【获取对象数据】*/ TransferData userData = (TransferData) getIntent().getSerializableExtra("userData"); userData.show(); /*【获取对象数组数据】*/ List<TransferData> resultList = (List<TransferData>) getIntent().getSerializableExtra("list"); resultList.get(0).show(); resultList.get(1).show(); Reception reception0 = new Reception(); reception0.setImgPath(R.drawable.ic_launcher); reception0.setScope("我是第0条数据。"); Reception reception1 = new Reception(); reception1.setImgPath(R.drawable.ic_launcher); reception1.setScope("我是第1条数据。"); listData.add(reception1); Reception reception2 = new Reception(); reception2.setImgPath(R.drawable.ic_launcher); reception2.setScope("我是第2条数据。"); listData.add(reception2); Reception reception3 = new Reception(); reception3.setImgPath(R.drawable.ic_launcher); reception3.setScope("我是第3条数据。"); listData.add(reception3); Reception reception4 = new Reception(); reception4.setImgPath(R.drawable.ic_launcher); reception4.setScope("我是第4条数据。"); listData.add(reception4); Reception reception5 = new Reception(); reception5.setImgPath(R.drawable.ic_launcher); reception5.setScope("我是第5条数据。"); listData.add(reception5); initUI(); } private void initUI(){ recyclerView = findViewById(R.id.recycler_View); /*【默认为纵向排列】*/ //LinearLayoutManager layoutManager = new LinearLayoutManager(this); //recyclerView.setLayoutManager(layoutManager); /*【调用 LinearLayoutManager 的 setOrientation() 方法来设置布局的排列方向】*/ //layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); /*【瀑布流布局】*/ //StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL); //recyclerView.setLayoutManager(manager); /*【网格布局】*/ GridLayoutManager gridlayout = new GridLayoutManager(this,2); recyclerView.setLayoutManager(gridlayout); RecyclerViewAdapter adapter = new RecyclerViewAdapter(listData); recyclerView.setAdapter(adapter); // ReceptionAdapter adapter = new ReceptionAdapter(this,R.layout.header,listData); ptrFrame = findViewById(R.id.mPtrFrame); //下拉刷新实例化 // listView = findViewById(R.id.ListRefresh); //数据list // listView.setAdapter(adapter); //与适配器绑定 // listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { // @Override // public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { // Reception rece = listData.get(i); // AlertDialogUtils utils = new AlertDialogUtils(RxJavaActivity.this); // utils.AlertTitle(rece.getScope(),"success"); // } // }); //textView = findViewById(R.id.TestRefresh); //final PtrClassicDefaultHeader header = new PtrClassicDefaultHeader(this); //经典的头部风格 final MaterialHeader header = new MaterialHeader(this); //Material头部风格 header.setPadding(0, PtrLocalDisplay.dp2px(15),0,0); // ptrFrame.setPinContent(true);//刷新时,保持内容不动,仅头部下移,默认,false // ptrFrame.setKeepHeaderWhenRefresh(true);//刷新时保持头部的显示,默认为true // ptrFrame.disableWhenHorizontalMove(true);//如果是ViewPager,设置为true,会解决ViewPager滑动冲突问题。 ptrFrame.setHeaderView(header); ptrFrame.addPtrUIHandler(header); ptrFrame.setPtrHandler(new PtrHandler() { /**【检查是否可以执行下来刷新,比如列表为空或者列表第一项在最上面时】**/ @Override public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) { return PtrDefaultHandler.checkContentCanBePulledDown(frame, content, header); } /**【加载数据时触发,可在这里做线程获取数据等操作】**/ @Override public void onRefreshBegin(PtrFrameLayout frame) { //textView.setText("下拉刷新完成"); // ReceptionAdapter adapter = new ReceptionAdapter(RxJavaActivity.this,R.layout.header,listData); // listView.setAdapter(adapter); //与适配器绑定 ptrFrame.refreshComplete(); //刷新完成 //ptrFrame.autoRefresh();//自动刷新 } }); } }
子项布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_gravity="center" android:gravity="center_horizontal"> <ImageView android:id="@+id/image_View" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher"/> <TextView android:id="@+id/text_View" android:gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello Word" android:textSize="18sp"/> </LinearLayout>
适配器编写:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.viewHolder> { private List<Reception> receptionList = new ArrayList<>(); /**【定义一个内部类,展示的数据由内部类决定】**/ static class viewHolder extends RecyclerView.ViewHolder { ImageView imageView; TextView textView; public viewHolder(View view) { super(view); imageView = view.findViewById(R.id.image_View); textView = view.findViewById(R.id.text_View); } } /**【构造函数初始化数据】**/ public RecyclerViewAdapter(List<Reception> list){ this.receptionList = list; } @Override public viewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.header,parent,false); final viewHolder holder = new viewHolder(view); /*【实现点击事件】*/ holder.imageView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { int position = holder.getAdapterPosition(); Reception reception = receptionList.get(position); Toast.makeText(view.getContext(),reception.getScope(),Toast.LENGTH_LONG).show(); return false; } }); holder.textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int position = holder.getAdapterPosition(); Reception reception = receptionList.get(position); Log.e("拿到的数据",reception.getScope()); } }); return holder; } @Override public void onBindViewHolder(viewHolder holder, int position) { Reception reception = receptionList.get(position); holder.imageView.setImageResource(reception.getImgPath()); holder.textView.setText(reception.getScope()); } @Override public int getItemCount() { return receptionList.size(); } }
Reception只是一个普通的实体类,里面写有 set 和 get 方法
看下我注释掉的代码,你会发现我这里也附有 RecyclerView 的使用