简体   繁体   English

如何根据特定条件在我的 RecyclerView 上为某些项目隐藏 ImageView?

[英]How can I hide an ImageView on my RecyclerView for certain items based on a particular condition?

I have a RecyclerView with an ImageView being a part of the items.我有一个 RecyclerView,其中 ImageView 作为项目的一部分。 I want to hide the ImageView from an item in the RecyclerView if a certain condition is met.如果满足特定条件,我想从 RecyclerView 中的项目中隐藏 ImageView。 How can I do that?我怎样才能做到这一点? I am attaching the image of how I want it to look like.我附上了我希望它看起来如何的图像。 这里

I am just defining the ImageViews in my xml layout file, so I cannot figure out how to actually remove it based on a certain condition in my android activity.我只是在我的 xml 布局文件中定义 ImageViews,所以我无法弄清楚如何根据我的 android 活动中的特定条件实际删除它。 I am attaching the code for the adapter class and my activity as well.我附上了适配器 class 的代码以及我的活动。

Here is the code for my adapter class这是我的适配器 class 的代码

Adapter Class适配器 Class

public class ReportAdapter extends RecyclerView.Adapter<ReportAdapter.ReportViewHolder> {

    private ArrayList<ReportItem> reportlist;
    private OnItemClickListener mListener;
    private Context mContext;

    public ReportAdapter(ArrayList<ReportItem> reportlist, Context context) {
        this.reportlist = reportlist;
        this.mContext = context;
    }

    public interface OnItemClickListener {
        void onItemClick(int position);
    }

    public void setOnItemClickListener(OnItemClickListener listener) {
        mListener = listener;
    }

    public static class ReportViewHolder extends RecyclerView.ViewHolder {

        public TextView departureDate;
        public TextView flightNumber;
        public View relativelayout;

        public ReportViewHolder(@NonNull View itemView, OnItemClickListener listener, Context context) {
            super(itemView);

            departureDate = itemView.findViewById(R.id.departureDaterecyclerview);
            flightNumber =  itemView.findViewById(R.id.flightnumberrecyclerview);
            relativelayout = itemView.findViewById(R.id.relativeLayoutReports);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(listener != null) {
                        int position = getAdapterPosition();
                        if(position != RecyclerView.NO_POSITION) {
                            listener.onItemClick(position);


                        }
                    }

                }
            });
        }
    }

    @NonNull
    @Override
    public ReportViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.report_listing_item, parent, false);
        ReportViewHolder rvh= new ReportViewHolder(v,mListener,mContext);
        return rvh;
    }

    @SuppressLint("ResourceAsColor")
    @Override
    public void onBindViewHolder(@NonNull ReportViewHolder holder, int position) {

        ReportItem currentItem = reportlist.get(position);

        if(position%2==0){
            holder.relativelayout.setBackgroundColor(mContext.getResources().getColor(R.color.reportlistingteal));

        } else {
            holder.relativelayout.setBackgroundColor(mContext.getResources().getColor(R.color.reportlistinglightteal));
        }
        holder.departureDate.setText((currentItem.getDepartureDate()));
        holder.flightNumber.setText(currentItem.getFlightNumber());
    }

Here is the code for my activity file这是我的活动文件的代码

Activity file活动文件

public class ReportListingActivity extends AppCompatActivity {

    private Button uploadAllBtn;
    private EditText searchFlights;
    private RecyclerView mRecyclerView;
    private ReportAdapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    ArrayList<ReportItem> reportitems = new ArrayList<>();
    private FlightViewModel flightViewModel;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_report_listing);

        uploadAllBtn = findViewById(R.id.uploadAllReports);
        searchFlights = findViewById(R.id.searchFlightText);
        mRecyclerView = findViewById(R.id.recyclerView);


        flightViewModel = new ViewModelProvider(this).get(FlightViewModel.class);

        flightViewModel.getAllFlights().observe(this, new Observer<List<Flight>>() {
            @Override
            public void onChanged(List<Flight> flight_list) {

                if (flight_list.size() == 0) return;

                String flightno = flight_list.get(0).getFlightNumber();
                String flightdate = flight_list.get(0).getDate();

                String[] flight_details = new String[2];
                flight_details[0]= flightno;
                flight_details[1] = flightdate;

                Log.v("pp", flight_details[0]);

                for(int i = 0; i <flight_list.size();i++){
                    String flightnumber = flight_list.get(i).getFlightNumber();
                    String departuredate = flight_list.get(i).getDate();
                    

                    reportitems.add(new ReportItem(flightnumber,departuredate));

                    
                }
                mRecyclerView.getAdapter().notifyDataSetChanged();
                flightViewModel.getAllFlights().removeObservers(ReportListingActivity.this);
            }
        });

        mLayoutManager = new LinearLayoutManager(ReportListingActivity.this);
        mAdapter = new ReportAdapter(reportitems, ReportListingActivity.this);

        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setAdapter(mAdapter);

    }

Report Item报告项目

public class ReportItem {

    private String departureDate;
    private String flightNumber;

    public ReportItem(String departureDate, String flightNumber) {
        this.departureDate = departureDate;
        this.flightNumber = flightNumber;
    }

    public String getDepartureDate() {
        return departureDate;
    }

    public String getFlightNumber() {
        return flightNumber;
    }
}

Add a boolean flag to your ReportItem class for each RecyclerView item.为每个 RecyclerView 项目添加 boolean 标志到您的 ReportItem class 中。 You will need to specify which rows show or hide this field when each item is created:您需要指定在创建每个项目时哪些行显示或隐藏此字段:

public class ReportItem {

    private String departureDate;
    private String flightNumber;
    private Boolean showMailIcon;

    public ReportItem(String departureDate, String flightNumber, Boolean showMailIcon) {
        this.departureDate = departureDate;
        this.flightNumber = flightNumber;
        this.showMailIcon = showMailIcon
    }

    public String getDepartureDate() {
        return departureDate;
    }

    public String getFlightNumber() {
        return flightNumber;
    }

    public String getShowMailIcon() {
        return showMailIcon;
    }
}

Then update the onBindViewHolder() method override to use this flag to show/hide the ImageView:然后更新onBindViewHolder()方法覆盖以使用此标志显示/隐藏 ImageView:

@Override
public void onBindViewHolder(@NonNull ReportViewHolder holder, int position) {

    ReportItem currentItem = reportlist.get(position);
  
    if (currentItem.getShowMailIcon() == true) {
        holder.mailIcon.setVisibility(View.VISIBLE);
    } else {
        holder.mailIcon.setVisibility(View.GONE);
    }
  

    //.......
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何根据条件在recyclerview中隐藏json对象? - How to hide json object in recyclerview based on condition? 如何根据条件自动跳过某些JUnit测试? - How can I automatically skip certain JUnit tests based on a condition? 如何在特定条件下扩展课程? - How can I extend a class in a particular condition? 如何根据 activity_main 中编辑文本中的文本更改片段中的 imageview 图像 - How can I change the imageview image in a fragment based on the text in a edittext from my activity_main 如何用 2 个项目过滤我的回收站视图? - how to filter my recyclerview with 2 items? 如何在RecyclerView中显示项目的条件? - How to put condition in showing items in RecyclerView? 如何通过firebase实时数据库永久隐藏RecyclerView中的imageview - How to hide the imageview in RecyclerView permanently through firebase realtime database 我希望我的 recyclerview 通过条件显示有限的卡片,但所有项目都继续显示 - I want my recyclerview to show limited cards through condition but all items keep getting shown 单击imageView时如何显示项目 - how can i display items when we click imageView 如何在不返回键的情况下根据条件对数组的项进行分组? - How can i group items of an array based on an condition without returning a key?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM