Android-----下拉重新整理整合到專案中
阿新 • • 發佈:2020-09-10
在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 的使用