如何设置从recyclerView到可见性的前4个项目?

时间:2018-10-05 13:31:31

标签: android android-recyclerview

实际上,我有一个菜单,可以从中添加回收站中的MainActivity按钮。在该菜单中,我将显示所有已添加的按钮,以便人们可以删除所选的按钮。

但是我有4个该recyclerView的第一项,它们应该是默认的,所以没有人可以触摸它们。要进行管理,我做出的决定是,如果滑动位置等于0到3,则我什么也不做,但是我将其隐藏该recyclerView并仅显示添加的项目。

enter image description here

就像在该图上看到的那样,第一个是我的MainActivity,其中包含4个默认项目,在它们上方,我正在显示添加的项目,而第二个是我的SettingsActivity,在其中添加其他项目,但现在它显示了甚至是我会隐藏的默认值。

3 个答案:

答案 0 :(得分:1)

解决此问题的一种方法是操纵后备数组,以使newg根本不了解丢失的视图。第二种方法是将零高度的其他视图类型分配给那些丢失的位置。一种用于可见位置,另一种用于不可见位置。以下是实现此概念的示例适配器:

RecyclerViewAdapter.java

RecyclerView

我会发布一个视频,但它只会显示从项目#4开始的class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private List<String> mItems; RecyclerViewAdapter(List<String> items) { mItems = items; } @Override public @NonNull RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view; if (viewType == INVISIBLE_ITEM_TYPE) { // The type is invisible, so just create a zero-height Space widget to hold the position. view = new Space(parent.getContext()); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0)); } else { view = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false); } return new ItemViewHolder(view); } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { ItemViewHolder vh = (ItemViewHolder) holder; String itemText = mItems.get(position); if (vh.getItemViewType() == VISIBLE_ITEM_TYPE) { // Only populate if a visible type. vh.mItemTextView.setText(itemText); int bgColor = (position % 2 == 0) ? android.R.color.holo_blue_light : android.R.color.holo_green_light; holder.itemView.setBackgroundColor( holder.itemView.getContext().getResources().getColor(bgColor)); } } @Override public int getItemCount() { return (mItems == null) ? 0 : mItems.size(); } @Override public int getItemViewType(int position) { // First 4 position don't show. The visibility of a position can be separately // determined if only, say, the first and third position should be invisible. return (position < 4) ? INVISIBLE_ITEM_TYPE : VISIBLE_ITEM_TYPE; } static class ItemViewHolder extends RecyclerView.ViewHolder { private TextView mItemTextView; ItemViewHolder(View item) { super(item); mItemTextView = item.findViewById(android.R.id.text1); } } private final static int VISIBLE_ITEM_TYPE = 1; private final static int INVISIBLE_ITEM_TYPE = 2; }

答案 1 :(得分:0)

就我对问题陈述的理解水平而言,您可以使用适配器类onBindViewHolder内的以下代码隐藏前4个项目。

rootView将是xml中回收者视图项目的父视图。

@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {

    if (position <= 3) {
        holder.rootView.setVisiblity(GONE);
    }
    else {
        holder.rootView.setVisiblity(VISIBLE);
    }
}

答案 2 :(得分:0)

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class docfile {
    public static void main(String[] args)
    {
        String readLine;
        ArrayList<String>str=new ArrayList<>(String);
        try {
            File file = new File("text.txt");
            BufferedReader b = new BufferedReader(new FileReader(file));
            while ((readLine = b.readLine()) != null) {
                str.add()=readLine.split("  ");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}