RecyclerView 中的 ImageView

3
在我的MainActivity.java中,我有一个类似登录按钮的东西。 我还有4个片段,每个片段都包含一个可回收视图(imageview + textview)。 ImageView是隐藏的,但是当我按下按钮时,它就变得可见了。我该怎么做?在适配器中, notifyDataSetChanged() 不起作用,而且我不能在片段页面上调用它,因为它在 onCreateView 方法外部。以下是我的代码:

MainActivity:包含按钮

片段页面:

public class Classici_Tab extends Fragment {

    LinkedList<Book> catalog = new LinkedList<>();

    RecyclerView mRecyclerView;
    BookListAdapter mAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View fragmentView = inflater.inflate(R.layout.classici_tab, container, false);

        fillCatalog("catalog.csv");     //fill the LinkedList

        mRecyclerView = (RecyclerView) fragmentView.findViewById(R.id.classici_rv);
        mAdapter = new BookListAdapter(getContext(), catalog);
        mRecyclerView.setAdapter(mAdapter);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

        return fragmentView;
    }
}

Adapter:

public class BookListAdapter extends RecyclerView.Adapter<BookListAdapter.BookViewHolder> {

    // View Holder
    class BookViewHolder extends RecyclerView.ViewHolder
    {
        public final ImageView cover;
        public final TextView title;
        public final TextView author;
        public final ImageView availability;
        final BookListAdapter mAdapter;

        public BookViewHolder(View itemView, BookListAdapter adapter) {
            super(itemView);
            cover = (ImageView) itemView.findViewById(R.id.cover);
            title = (TextView) itemView.findViewById(R.id.title);
            author = (TextView) itemView.findViewById(R.id.author);
            availability = (ImageView) itemView.findViewById(R.id.availability);

            MainActivity m = new MainActivity();
            if(m.loggedin)  availability.setVisibility(View.VISIBLE);
            else            availability.setVisibility(View.INVISIBLE);

            this.mAdapter = adapter;
        }
    }

    private LinkedList<Book> mBookList = new LinkedList<>();
    private LayoutInflater mInflater;
    boolean isVisible = false;

    public BookListAdapter()    {}

    public BookListAdapter(Context context, LinkedList<Book> bookList) {
        mInflater = LayoutInflater.from(context);
        this.mBookList = bookList;
    }

    //IT DOESN'T WORK
    public void setPicturesVisibility(boolean isVisible){
        this.isVisible = true;
        notifyDataSetChanged();
    }

    @Override
    public BookViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View mItemView = mInflater.inflate(R.layout.tab_list_item, parent, false);
        return new BookViewHolder(mItemView, this);
    }

    @Override
    public void onBindViewHolder(BookViewHolder holder, int position) {
        holder.cover.setImageResource(mBookList.get(position).getCover());
        holder.title.setText(mBookList.get(position).getTitle());
        holder.author.setText(mBookList.get(position).getAuthor());
        holder.availability.setImageResource(mBookList.get(position).getAvailability());

        if(isVisible){
            holder.availability.setVisibility(View.VISIBLE);
        }else{
            holder.availability.setVisibility(View.INVISIBLE);
        }
    }

    @Override
    public int getItemCount() {
        return mBookList.size();
    }
}

请发布您的适配器代码。 - DimDim
2个回答

0

无需重新创建适配器。您可以在 RecyclerViewAdapter 中添加一个布尔变量 arePicturesVisible = false;。 并在适配器中创建一个方法:

public void setPicturesVisibility(boolean areVisible){
    arePicturesVisible = areVisible;
    notifyDataSetChanged();
}

然后添加:

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    .....
    if(arePicturesVisible){
        holder.image.setVisibility(View.VISIBLE);
    }else{
        holder.image.setVisibility(View.INVISIBLE);
    }
    .....
}

然后在您的按钮onClick()方法中,从RecyclerView适配器调用setPicturesVisibility()


很遗憾,它不起作用... "notifyDataSetChanged()" 似乎没有被调用。 - Lorenzo

0

不确定为什么需要重新创建适配器。在不重新创建适配器的情况下,您可以将监听器添加到按钮中,并在onclick事件处理程序中,在recyclerview适配器的viewholder构造函数中使图像可见。

public ViewHolder(View view) {
        super(view);
        textview = view.findViewById(R.id.textview);       
        imgView = view.findViewById(R.id.storeImg);

        Button button = (Button) view.findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            imgView.setVisibility(View.VISIBLE);
            }
        });
    }

你可以在这里找到RecyclerView的例子 http://www.zoftino.com/android


据我理解,他想在按钮点击时隐藏所有视图中的所有图片。 - DimDim
我原以为按钮是项目的一部分,如果不是的话,您的解决方案就行了。@DimDim - Arnav Rao
Lorenco写道:“我有一个按钮和一个Recycler View(ImageView + TextView)”,所以我认为按钮在Recycler View之外。 - DimDim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接