我在哪里可以将setVisibility设置为recyclerview中的textview?

时间:2017-02-27 13:26:56

标签: android android-layout android-studio android-recyclerview

我有一个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?

3 个答案:

答案 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")