Sha*_*aid 7 layout android android-recyclerview recyclerview-layout
嗨,我想从中跳过一些项目recyclerview。

这是一些代码
item_Data.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_marginTop="10dp"
android:id="@+id/mainlayout"
android:layout_height="wrap_content">
<ImageView
android:visibility="gone"
android:id="@id/image"
android:layout_gravity="center"
android:layout_width="100dp"
android:layout_height="100dp" />
<TextView
android:visibility="gone"
android:textStyle="bold"
android:id="@id/title"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:maxLength="15" />
Run Code Online (Sandbox Code Playgroud)
回收者视图是
@Override
public void onBindViewHolder(final MovieViewHolder holder, final int position) {
String download= news.get((position)).getDownloadLinkForApkNew();
String desc_new = news.get(position).getApkJData();
if (download.isEmpty()==false && desc_new.isEmpty()==false) {
holder.movieTitle.setVisibility(View.VISIBLE);
holder.imageView.setVisibility(View.VISIBLE);
Picasso.with(context).load(news.get((position)).getBetterFeaturedImage().getSourceUrl()).into(holder.imageView);
holder.movieTitle.setText(news.get(position).getTitle().getRendered());
}
Run Code Online (Sandbox Code Playgroud)
我不希望没有下载和desc_new的项目。我的逻辑作品不可见,但它们留有空间。如何删除项目之间的空格。
让我们深入了解回收者视图的工作原理
我们有两个函数 onCreateView 和 onBindview。由于函数的名称很容易解释 onCreateView 创建视图,而 onBindView 获取创建的视图并将数据绑定到其中
现在让我们假设整个视图类型是相似的,并且您使用对象数组或光标来填充整个视图。
所以在bindView中为了获取数据你必须使用
cursor.moveToPosition(position)
Run Code Online (Sandbox Code Playgroud)
或者
mList.get(position)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,绑定是根据我们从 onBindView 参数获得的位置发生的
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
//mList.get(position) or cursor.moveToPosition
}
Run Code Online (Sandbox Code Playgroud)
所以你可以利用这些知识来专门跳过视图的绑定
假设您有一个函数接受位置作为参数并返回实际位置作为结果
private int getActualPostion(int position){
//your logic to skip the given postion
//say if(position == 4){return postion+2}
}
Run Code Online (Sandbox Code Playgroud)
所以你可以实现这样的东西
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
mList.get(getActualPosition(position));
}
Run Code Online (Sandbox Code Playgroud)
这将允许您跳过那些不显示的视图
最后在 getCount 方法中,回收器视图使用该方法来决定视图的数量
@Override
public int getItemCount() {
//foreach in array { if(already downloaded) i++}
// return array.size - i
}
Run Code Online (Sandbox Code Playgroud)
我希望这会有所帮助,这也将为您提供更大的灵活性,您可以添加更多过滤器并使用相同的数据集...更轻松地跳过视图
有一个非常简单的解决方法:
如果view.setVisibility(View.GONE);在将视图绑定到ViewHolder时对视图执行操作,则该视图将被隐藏,但该视图原本应该存在一个空格。因此,这种方法效率不高。
您需要做的就是将要隐藏的视图的高度和/或宽度设置为零。这是实现此目的的简单方法:
视图持有人:
public class MyViewHolder extends RecyclerView.ViewHolder{
public LinearLayout.LayoutParams params;
public LinearLayout rootView //the outermost view from your layout. Note that it doesn't necessarily have to be a LinearLayout.
//todo: Don't forget to add your other views
public MyViewHolder(View itemView){
super(itemView);
params = new LinearLayout.LayoutParams(0, 0);
rootView = itemView.findViewById(R.id.rootView);
//todo: Don't forget to initialize your views
}
}
Run Code Online (Sandbox Code Playgroud)
onBindViewHolder:
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position){
if(your_condition){
holder.rootView.setLayoutParams(holder.params);
//this line hides the view completely
}
else{
//todo: Do your regular stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助。编码愉快!
| 归档时间: |
|
| 查看次数: |
4169 次 |
| 最近记录: |