我有一个recyclerview,每个项目都有一个按钮。有时我需要隐藏这个按钮。
item 1
button visible
item 2
button gone
...
问题是,我不知道将MyButton
设置为GONE
的最佳位置。我在public ViewHolder(View itemView)
内尝试过,但我的应用程序崩溃了。
public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {
private ImageLoader imageLoader;
private final Context context;
//List to store all posts
List<Posts> Posts;
//Constructor of this class
public CardAdapter(List<Posts> Post, Context context){
super();
this.Posts = Post;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.posts_list, parent, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Posts post = Posts.get(position);
holder.post = post;
//Loading image from url
imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader();
//Showing data on the views
holder.imageView.setImageUrl(post.getImageUrl(), imageLoader);
holder.textViewName.setText(post.getName());
holder.textViewPublisher.setText(post.getPublisher());
holder.setIsRecyclable(false);
}
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
//Views
public NetworkImageView imageView;
public TextView textViewName;
public TextView textViewPublisher;
public TextView textViewMyButton;
public Posts post;
//Initializing Views
public ViewHolder(View itemView) {
super(itemView);
imageView = (NetworkImageView) itemView.findViewById(R.id.imageViewHero);
textViewName = (TextView) itemView.findViewById(R.id.textViewName);
textViewPublisher = (TextView) itemView.findViewById(R.id.textViewPublisher);
textViewMyButton = (TextView) itemView.findViewById(R.id.textViewMyButton);
}
@Override
public void onClick(View v) {
//
}
}
}
我想做那样的事情:
if(StringName == "1"){
TextView txtView2 = (TextView) itemView.findViewById(R.id.MyButton);
txtView2.setVisibility(View.GONE);
}
任何想法在哪里以及如何将其添加到recyclelerview中隐藏按钮,其中StringName == 1?
答案 0 :(得分:1)
import SHA256 from 'crypto-js/sha256'
let agentId = 312
let userId = 567
let chatHash = SHA256('agent:' + agentId + '_user:' + userId)
您可以像上面一样在 @Override
public void onBindViewHolder(ViewHolder holder, int position) {
Posts post = Posts.get(position);
holder.post = post;
//Loading image from url
imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader();
//Showing data on the views
holder.imageView.setImageUrl(post.getImageUrl(), imageLoader);
if(condition is true){
holder.textViewName.setVisibility(View.GONE);
}else{
holder.textViewName.setVisibility(View.VISIBLE);
}
holder.textViewName.setText(post.getName());
holder.textViewPublisher.setText(post.getPublisher());
holder.setIsRecyclable(false);
}
设置曝光度。
你必须为你的视图设置两个可见性。如果你只是将它设置为已经消失并且在条件为真时不写入它就会变得可见。滚动时会遇到错误。
答案 1 :(得分:1)
最佳位置是onBindViewHolder
,因为您可以访问适配器的当前行以及将在那里显示的任何数据。
你不应该使用ViewHolder的构造函数,因为它应该只是&#34;持有视图&#34;。
如果您的应用崩溃,我们需要的信息比您提供的更多
答案 2 :(得分:1)
您应该在OnBindViewHolder
方法中设置可见性。
在Java中检查字符串不应该像StringName == "1"
中那样使用“==”
并应使用“等于”而不是StringName.equals("1")