【问题标题】:view.GONE is not working progressbar in RecyclerView.OnBindViewHolderview.GONE 在 RecyclerView.OnBindViewHolder 中没有工作进度条
【发布时间】:2018-04-01 17:56:58
【问题描述】:

onbindviewholder 方法中的进度条不起作用

@Override
public void onBindViewHolder(DataHolder holder, int position) {
    ListItem item = listdata.get(position);
    final View view = layoutInflater.inflate(R.layout.list_item, null);
    final TextView text = (TextView) view.findViewById(R.id.textView6);

    //view.GONE is not working in this method but TextView 

    final ProgressBar progressBar;
    progressBar=(ProgressBar) view.findViewById(R.id.progressBar2);
    progressBar.setVisibility(view.GONE);
    holder.title.setText(item.getTitle());
 }

【问题讨论】:

  • 您正在那里膨胀一个新的、未使用的布局。您调用的ProgressBar 不是您在屏幕上看到的setVisibility()。摆脱通货膨胀和findViewById() 调用,并在holder 中调用ProgressBar 中的setVisibility(),就像你是那里的TextView,假设你已经正确设置了holder 中的ProgressBar .
  • @mike 你能给我举个例子吗,我有点迷路了
  • 没什么可展示的。它主要是从你拥有的东西中删除东西。假设你已经在DataHolder 中设置了ProgressBar,就像你在那里设置title TextView 一样,你只需要调用setVisibility() 即可;例如,holder.progressBar.setVisibility(view.GONE);。然后,您可以删除当前在 onBindViewHolder() 中的所有行,从 final View view = ...progressBar.setVisibility(view.GONE);

标签: android android-recyclerview android-progressbar


【解决方案1】:

膨胀View 并将其打包在ViewHolder 中(在您的情况下为DataHolder)在onCreateViewHolder 方法中占有一席之地。

onBindViewHolder 中,您仅引用先前创建的View。不要膨胀新的,使用以前创建的(这是回收)并像你的 item 对象说的那样设置它

@Override
public void onBindViewHolder(DataHolder holder, int position) {
    ListItem item = listdata.get(position);
    ...
    holder.title.setText(item.getTitle());
    holder.progressBar.setVisibility(item.shouldBeVisible() ? Visibility.VISIBLE : Visibility.GONE);
}

【讨论】:

    猜你喜欢
    • 2017-01-18
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多