【问题标题】:Interaction between the Menu Item (of Status Bar) and RecyclerView Item?菜单项(状态栏)和 RecyclerView 项之间的交互?
【发布时间】:2017-07-20 06:00:53
【问题描述】:

我已经通过来自服务器的 JSON 响应填充了一个回收器视图。

recyclerview 项目由图像和时间组成。还有一个按钮,其可见性设置为不可见。

这是每个项目在按钮(也可以编辑)可见时的外观

现在,(应用程序的)菜单项中有一个编辑按钮,单击该按钮我想将所有 recyclerview 项按钮设置为可见。

我怎样才能做到这一点?我尝试搜索相同但无济于事。

编辑:

这是显示 RecyclerView 的 Schedule Fragment 中的项目代码。

public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {

        case R.id.action_edit:
            //onClick of edit menu item

            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}

这是 ScheduleAdapter 中的 ViewHolder 类

    public class ViewHolder extends RecyclerView.ViewHolder {

    private NetworkImageView imageView_status;
    private TextView textView_status;
    private TextView textView_time;
    private Button button_edit;

    public ViewHolder(View itemView) {
        super(itemView);

        imageView_status = (NetworkImageView) itemView.findViewById(R.id.imageView);
        textView_status = (TextView) itemView.findViewById(R.id.textView_Status);
        textView_time = (TextView) itemView.findViewById(R.id.textView_Time);
        button_edit = (Button) itemView.findViewById(R.id.button);
    }
}

这是 ScheduleAdapter 的 onBindViewHolder

    public void onBindViewHolder(final CustomScheduleListAdapter.ViewHolder holder, int position) {

    if (imageLoader == null) {
        imageLoader = AppController.getInstance().getImageLoader();
    }

    holder.imageView_status.setImageUrl(punches.get(position).getImageURL(), imageLoader);
    holder.textView_status.setText(punches.get(position).getStatusName());
    holder.textView_time.setText(punches.get(position).getTimings());

    holder.button_edit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View v) {
            //Actions performed after button click
        }
    });
}

【问题讨论】:

  • 贴出相关代码
  • @KNeerajLal 完成

标签: android android-recyclerview


【解决方案1】:

您可以在适配器中设置一个字段来跟踪RecyclerView 项目是否应设置为可见。然后在onBindViewHolder 中设置基于它的视图的可见性。最后在onOptionsItemSelected 中设置适配器中该字段的值并在其上调用notifyItemRangeChanged

例如:

适配器:

public class ScheduleAdapter extends RecyclerView.Adapter<CustomScheduleListAdapter.ViewHolder> {

    private boolean showAllViews = false;

    public void setShowAllViews(boolean show) {
        showAllViews = show;
        notifyItemRangeChanged(0, getItemCount());
    }

    @Override
    public void onBindViewHolder(CustomScheduleListAdapter.ViewHolder holder, int position) {
        holder.viewyoucareabout.setVisibility(showAllViews? View.VISIBLE : View.GONE);
    }
}

调度片段:

public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {

        case R.id.action_edit:
            adapter.setShowAllViews(true);    
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}

【讨论】:

  • 伙计,这正是我想要的!像魅力一样工作。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多