我如何对 recyclerview 应用限制?
how can i apply limit to recyclerview?
我想对 recyclerview 应用限制,只在其中显示 5 个结果,并在列表末尾显示一个用于转到另一个地方的按钮?!
我的代码在下面;
适配器代码:
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.Holder> {
ArrayList<Products> ProductsList;
Context context;
public ProductAdapter(ArrayList<Products> productsList, Context context) {
ProductsList = productsList;
this.context = context;
}
@NonNull
@Override
public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(context).inflate(R.layout.row_layout_horizental, parent, false);
return new Holder(v);
}
@Override
public void onBindViewHolder(@NonNull Holder holder, int position) {
Products products = ProductsList.get(position);
holder.txtName.setText(products.getName());
holder.txtPrice.setText(products.getPrice());
Picasso.get().load(Config.ip_value + "/images/" + products.getPhoto()).into(holder.imgV);
}
@Override
public int getItemCount() {
return ProductsList.size();
}
public class Holder extends RecyclerView.ViewHolder {
TextView txtName;
TextView txtPrice;
ImageView imgV;
public Holder(@NonNull View itemView) {
super(itemView);
txtName = itemView.findViewById(R.id.rowTxtProductName);
txtPrice = itemView.findViewById(R.id.rowTxtPrice);
imgV = itemView.findViewById(R.id.rowImgProduct);
}
}
}
我在主要片段中有一些代码,但我认为没有必要放在这个地方,但如果你想看到它们,请发表评论,我会把所有代码都放在更新文本中
谢谢
您可以在将 list
传递给 RecyclerView
之前将 list
切片为仅包含 5
项,或者只需将 Adapter
中的 getItemCount
方法更改为 return 5
@Override
public int getItemCount() {
return ProductsList.size() > 5 ? 5 : ProductsList.size();
}
您可以使用 getItemCount() 设置限制为
@Override
public int getItemCount() {
return 5;
}
通过另一个地方,如果你的意思是其他 activity 或片段,然后放置
xml 文件中 recyclerview 布局末尾的按钮。
例如:如果使用 RelativeLayout,
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:id="@+id/recyclerview"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Next"
android:layout_alignParentBottom="true"
android:layout_below="@+id/recyclerview"
android:id="@+id/btn_next"/>
</RelativeLayout>
然后单击按钮,您可以调用意图或类似内容以转到您的页面
您可以在 ProductsList 中设置限制查询 API。
如果您使用的是 retrofit2
您可以在 API 界面中定义限制参数,如果该选项在您的后端服务器中有,
@GET("products")
Call<Products> getProducts(@Query("limit") int limit);
并在你的 activity class 中定义你传递 setAdapter 的方法,如下所示
public void getProducts(int limit){
Call<Products> call = yourAPI.getProducts(limit);
call.enqueue(new Callback<Products>() {
@Override
public void onResponse(Call<Products> call, Response<Products> response) {
if (response.isSuccessful() && response.body() != null) {
ArrayList<Products> products = response.body();
if (products == null) products = new ArrayList<>();
productsAdapter.setData(products); // setData needs to be defined in your adapter
} else {
Toast.makeText(yourActivity.this, "Server Error", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<Products> call, Throwable t) {
if(t.getMessage() != null) Log.e("ErrorTag", t.getMessage());
Toast.makeText(yourActivity.this, "Server Error", Toast.LENGTH_SHORT).show();
}
});
不要忘记定义名为 setData 的新方法,
public void setData(ArrayList<Products> productsList) {
this.ProductsList.addAll(productsList);
notifyDataSetChanged();
};
要获得其他 5 种产品,我不建议您创建下一个或上一个按钮,
最好在适配器的 onBindViewHolder 方法中添加下面的代码,以便在用户滚动到最后一项时加载另外 5 个产品,
if (position == (ProductsList.size() - 1)){
if (context instanceof YourActivity){
YourActivity activity = (YourActivity) context;
activity.getProducts(ProductsList.size());
}
}
我想对 recyclerview 应用限制,只在其中显示 5 个结果,并在列表末尾显示一个用于转到另一个地方的按钮?!
我的代码在下面;
适配器代码:
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.Holder> {
ArrayList<Products> ProductsList;
Context context;
public ProductAdapter(ArrayList<Products> productsList, Context context) {
ProductsList = productsList;
this.context = context;
}
@NonNull
@Override
public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(context).inflate(R.layout.row_layout_horizental, parent, false);
return new Holder(v);
}
@Override
public void onBindViewHolder(@NonNull Holder holder, int position) {
Products products = ProductsList.get(position);
holder.txtName.setText(products.getName());
holder.txtPrice.setText(products.getPrice());
Picasso.get().load(Config.ip_value + "/images/" + products.getPhoto()).into(holder.imgV);
}
@Override
public int getItemCount() {
return ProductsList.size();
}
public class Holder extends RecyclerView.ViewHolder {
TextView txtName;
TextView txtPrice;
ImageView imgV;
public Holder(@NonNull View itemView) {
super(itemView);
txtName = itemView.findViewById(R.id.rowTxtProductName);
txtPrice = itemView.findViewById(R.id.rowTxtPrice);
imgV = itemView.findViewById(R.id.rowImgProduct);
}
}
}
我在主要片段中有一些代码,但我认为没有必要放在这个地方,但如果你想看到它们,请发表评论,我会把所有代码都放在更新文本中
谢谢
您可以在将 list
传递给 RecyclerView
之前将 list
切片为仅包含 5
项,或者只需将 Adapter
中的 getItemCount
方法更改为 return 5
@Override
public int getItemCount() {
return ProductsList.size() > 5 ? 5 : ProductsList.size();
}
您可以使用 getItemCount() 设置限制为
@Override
public int getItemCount() {
return 5;
}
通过另一个地方,如果你的意思是其他 activity 或片段,然后放置 xml 文件中 recyclerview 布局末尾的按钮。
例如:如果使用 RelativeLayout,
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:id="@+id/recyclerview"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Next"
android:layout_alignParentBottom="true"
android:layout_below="@+id/recyclerview"
android:id="@+id/btn_next"/>
</RelativeLayout>
然后单击按钮,您可以调用意图或类似内容以转到您的页面
您可以在 ProductsList 中设置限制查询 API。 如果您使用的是 retrofit2
您可以在 API 界面中定义限制参数,如果该选项在您的后端服务器中有,
@GET("products")
Call<Products> getProducts(@Query("limit") int limit);
并在你的 activity class 中定义你传递 setAdapter 的方法,如下所示
public void getProducts(int limit){
Call<Products> call = yourAPI.getProducts(limit);
call.enqueue(new Callback<Products>() {
@Override
public void onResponse(Call<Products> call, Response<Products> response) {
if (response.isSuccessful() && response.body() != null) {
ArrayList<Products> products = response.body();
if (products == null) products = new ArrayList<>();
productsAdapter.setData(products); // setData needs to be defined in your adapter
} else {
Toast.makeText(yourActivity.this, "Server Error", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<Products> call, Throwable t) {
if(t.getMessage() != null) Log.e("ErrorTag", t.getMessage());
Toast.makeText(yourActivity.this, "Server Error", Toast.LENGTH_SHORT).show();
}
});
不要忘记定义名为 setData 的新方法,
public void setData(ArrayList<Products> productsList) {
this.ProductsList.addAll(productsList);
notifyDataSetChanged();
};
要获得其他 5 种产品,我不建议您创建下一个或上一个按钮, 最好在适配器的 onBindViewHolder 方法中添加下面的代码,以便在用户滚动到最后一项时加载另外 5 个产品,
if (position == (ProductsList.size() - 1)){
if (context instanceof YourActivity){
YourActivity activity = (YourActivity) context;
activity.getProducts(ProductsList.size());
}
}