繁体   English   中英

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

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

我有一个 RecyclerView,其中 ImageView 作为项目的一部分。 如果满足特定条件,我想从 RecyclerView 中的项目中隐藏 ImageView。 我怎样才能做到这一点? 我附上了我希望它看起来如何的图像。 这里

我只是在我的 xml 布局文件中定义 ImageViews,所以我无法弄清楚如何根据我的 android 活动中的特定条件实际删除它。 我附上了适配器 class 的代码以及我的活动。

这是我的适配器 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());
    }

这是我的活动文件的代码

活动文件

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);

    }

报告项目

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;
    }
}

为每个 RecyclerView 项目添加 boolean 标志到您的 ReportItem class 中。 您需要指定在创建每个项目时哪些行显示或隐藏此字段:

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;
    }
}

然后更新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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM