diff --git a/config.gradle b/config.gradle index 739b311..e9e8ecf 100644 --- a/config.gradle +++ b/config.gradle @@ -44,6 +44,6 @@ ext { xDesign : 'com.google.android.material:material:1.0.0', xAppCompat : 'androidx.appcompat:appcompat:1.0.2', - xRecyclerView: 'androidx.recyclerview:recyclerview:1.0.0', + xRecyclerView: 'androidx.recyclerview:recyclerview:1.1.0', xCardView : 'androidx.cardview:cardview:1.0.0'] } \ No newline at end of file diff --git a/x/src/main/java/com/yanzhenjie/recyclerview/SwipeRecyclerView.java b/x/src/main/java/com/yanzhenjie/recyclerview/SwipeRecyclerView.java index be1ef6b..9f5a3fd 100644 --- a/x/src/main/java/com/yanzhenjie/recyclerview/SwipeRecyclerView.java +++ b/x/src/main/java/com/yanzhenjie/recyclerview/SwipeRecyclerView.java @@ -743,7 +743,7 @@ public void onScrolled(int dx, int dy) { } } - private void dispatchLoadMore() { + public void dispatchLoadMore() { if (isLoadError) return; if (!isAutoLoadMore) { diff --git a/xSample/src/main/AndroidManifest.xml b/xSample/src/main/AndroidManifest.xml index 1e94d72..15990d8 100644 --- a/xSample/src/main/AndroidManifest.xml +++ b/xSample/src/main/AndroidManifest.xml @@ -130,6 +130,9 @@ + \ No newline at end of file diff --git a/xSample/src/main/java/com/yanzhenjie/recyclerview/sample/activity/MainActivity.java b/xSample/src/main/java/com/yanzhenjie/recyclerview/sample/activity/MainActivity.java index 117a271..f76461c 100644 --- a/xSample/src/main/java/com/yanzhenjie/recyclerview/sample/activity/MainActivity.java +++ b/xSample/src/main/java/com/yanzhenjie/recyclerview/sample/activity/MainActivity.java @@ -27,6 +27,7 @@ import com.yanzhenjie.recyclerview.sample.activity.menu.MenuActivity; import com.yanzhenjie.recyclerview.sample.activity.move.MoveActivity; import com.yanzhenjie.recyclerview.sample.activity.nested.NestedActivity; +import com.yanzhenjie.recyclerview.sample.activity.nestscrollview.NestscrollViewActivity; import java.util.Arrays; import java.util.List; @@ -79,6 +80,10 @@ public void onItemClick(View itemView, int position) { startActivity(new Intent(this, GroupActivity.class)); break; } + case 7: { + startActivity(new Intent(this, NestscrollViewActivity.class)); + break; + } } } diff --git a/xSample/src/main/java/com/yanzhenjie/recyclerview/sample/activity/nestscrollview/NestscrollViewActivity.java b/xSample/src/main/java/com/yanzhenjie/recyclerview/sample/activity/nestscrollview/NestscrollViewActivity.java new file mode 100644 index 0000000..a110387 --- /dev/null +++ b/xSample/src/main/java/com/yanzhenjie/recyclerview/sample/activity/nestscrollview/NestscrollViewActivity.java @@ -0,0 +1,146 @@ +package com.yanzhenjie.recyclerview.sample.activity.nestscrollview; + +import android.os.Bundle; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.core.widget.NestedScrollView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.yanzhenjie.recyclerview.SwipeRecyclerView; +import com.yanzhenjie.recyclerview.sample.R; + +import java.util.ArrayList; +import java.util.List; + +public class NestscrollViewActivity extends AppCompatActivity { + + private NestedScrollView mNestedScrollView; + + private SwipeRecyclerView mSwipeRecyclerView; + + private List mList ; + + private Handler mHandler = new Handler(); + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.item_nestscorllview); + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + ActionBar actionBar = getSupportActionBar(); + assert actionBar != null; + actionBar.setDisplayHomeAsUpEnabled(true); + + + mNestedScrollView = findViewById(R.id.nestedScrollView); + mSwipeRecyclerView = findViewById(R.id.swipeRecyclerView); + + mList = new ArrayList<>(); + mSwipeRecyclerView.setLayoutManager(new LinearLayoutManager(this)); + mSwipeRecyclerView.setAdapter(new Adapter()); + setData(); + mSwipeRecyclerView.getAdapter().notifyDataSetChanged(); + + mSwipeRecyclerView.useDefaultLoadMore(); + mSwipeRecyclerView.setLoadMoreListener(new SwipeRecyclerView.LoadMoreListener() { + @Override + public void onLoadMore() { + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + setData(); + mSwipeRecyclerView.getAdapter().notifyDataSetChanged(); + } + },1 * 1000); + } + }); + + mNestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { + @Override + public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { + View onlyChild = v.getChildAt(0); + if (onlyChild.getHeight() <= scrollY + v.getHeight()) { + // 如果满足就是到底部了 + //该方法需要是public + mSwipeRecyclerView.dispatchLoadMore(); + + /* //如果dispatchLoadMore 是private + mSwipeRecyclerView.onScrollStateChanged(2); + mSwipeRecyclerView.onScrolled(scrollX,scrollY);*/ + + } + + } + }); + + } + + /** + * 制作模拟数据 + */ + private void setData() { + int baseNo = mList.size() ; + for(int i = baseNo ; i < baseNo + 20 ; i++ ){ + mList.add(i); + } + /*//如果dispatchLoadMore是private + //去掉RecyclerView内的滚动状态,要不页面滚动会卡顿 + //mSwipeRecyclerView.onScrollStateChanged(-1);*/ + + mSwipeRecyclerView.loadMoreFinish(false,true); + } + + private class Adapter extends RecyclerView.Adapter { + + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_nestscorllview_item,parent,false); + ViewHolder viewHolder = new ViewHolder(view); + return viewHolder; + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + TextView tvItemText = holder.itemView.findViewById(R.id.tvItemText); + tvItemText.setText("第" + mList.get(position).toString() + "个"); + } + + @Override + public int getItemCount() { + return mList.size(); + } + } + + private class ViewHolder extends RecyclerView.ViewHolder { + + View itemView; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + this.itemView = itemView; + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + finish(); + } + return true; + } + +} diff --git a/xSample/src/main/res/layout/item_nestscorllview.xml b/xSample/src/main/res/layout/item_nestscorllview.xml new file mode 100644 index 0000000..f46481d --- /dev/null +++ b/xSample/src/main/res/layout/item_nestscorllview.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/xSample/src/main/res/layout/item_nestscorllview_item.xml b/xSample/src/main/res/layout/item_nestscorllview_item.xml new file mode 100644 index 0000000..b269b63 --- /dev/null +++ b/xSample/src/main/res/layout/item_nestscorllview_item.xml @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file diff --git a/xSample/src/main/res/values/array.xml b/xSample/src/main/res/values/array.xml index 76d6059..328f249 100644 --- a/xSample/src/main/res/values/array.xml +++ b/xSample/src/main/res/values/array.xml @@ -23,6 +23,7 @@ 和滑动布局嵌套使用 二级列表 Sticky分组效果 + NestedScrollView嵌套