【问题标题】:How to access view inside activity from adapter in android?如何从android中的适配器访问活动内部视图?
【发布时间】:2018-09-05 12:22:16
【问题描述】:

有谁知道如何在活动中访问适配器 imageView 以隐藏视图。请举例说明。

【问题讨论】:

  • 适配器到底是什么?回收站视图?
  • 是的,RecyclerView

标签: android android-activity adapter


【解决方案1】:

我希望这对你有用。

通过使用SharedPreferences,我们可以轻松地从活动或片段中隐藏视图。

将标志保存在 SharedPreferences 中,即来自活动的 true。

如果您使用的是Recyclerview,那么在onBindViewHolder 方法中检查条件

if(flag==true){
    holder.yourView.setVisibility(View.GONE);
}else{
    holder.yourView.setVisibility(View.VISIBLE);
}

【讨论】:

    【解决方案2】:

    转到适配器的 onBindViewHolder 并获取您的 imageview 的 id 和这样的代码 holder.mImgVw.setVisibility(View.GONE);

    【讨论】:

    • 不,这是一个非常非常糟糕的主意。 RecyclerView 的概念是展示已经准备好的数据。不以修改的方式与之交互。如果您想更改数据的某些内容,只需更新整个数据集并让 RecyclerView 做到最好(无论您是否编写了自己的关于如何更新数据或使用 DiffUtils 的解决方案,或者只是中继 nofityDatasetChanged)。对于双向通信,使用回调
    • 但根据问题,我的回答是重点。我只是展示了如何从适配器隐藏视图。 nofityDatasetChanged() 是通知适配器数据已更改的方法,如果一个通过编辑或删除或任何带有 recyclerview 卡的更改数据。然后我们必须调用方法 nofityDatasetChanged()。但是这里根据问题将属于另一个主题。
    【解决方案3】:

    您不应该直接与 ImageView 交互,而是可以使用notifyItemChanged() 来更新 Adapter 中的 ImageView 状态。但是,您需要通过在模型数据中添加标志或使用SparseBooleanArray 作为保存 ImageView 状态的机制来稍微修改您的适配器代码。

    这里是例子:

    public class Adapter ... {
      private SparseBooleanArray mSelectedItems;
      private List<YourModel> mItems;
    
      public Adapter(List<YourModel> items) {
    
        mItems = items;
        mSelectedItems = new SparseBooleanArray();
      }
    
      ...
      public void onBindViewHolder(....) {
        int itemPosition = viewHolder.getAdapterPosition();
        YourModel item = items.get(itemPosition);
    
        boolean visible = mSelectedItems.get(itemPosition);   
        viewHolder.imageView.setVisibility(visible? View.VISIBLE: View.GONE);
    
        ...
      }
    
      public void setItemVisibilityByPosition(int position, boolean visible) {
        mSelectedItems.put(position, visible);
        notifyItemChanged(position);
      }
    
    }
    

    您可以使用以下方法更改图像可见性:

     // Assume the mAdapter is your Adapter
     mAdapter.setItemVisibilityByPosition(5, true);
    

    【讨论】:

    • 谢谢@ישו אוהב אותך,你能解释一下吗?因为我认为您明智地选择了位置。
    猜你喜欢
    • 2015-09-29
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多