1. 程式人生 > 實用技巧 >Android-----下拉重新整理整合到專案中

Android-----下拉重新整理整合到專案中

在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 的使用