簡體   English   中英

從RecyclerView中的某些行更改ImageView可見性

[英]Change ImageView visibility from certain rows in RecyclerView

我試圖在選定的行中更改ImageView的可見性。 基本上我想表現當用戶點擊一行,ImageView顯示在該行並隱藏其他ImageViews,當用戶點擊另一行時,它將ImageView的可行性切換到該行並隱藏另一個ImageView之前點擊的行。

繼承我的recyclerview適配器中的代碼。 我目前在單擊的行上顯示ImageView但它當前不會隱藏其他行中的其他ImageViews!

public void onBindViewHolder(final PreGameSelectRecyclerAdapter.MyViewHolder holder, int position) {
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (holder.isSelected.getVisibility() == View.INVISIBLE) {
                holder.isSelected.setVisibility(View.VISIBLE);
            } else {
                holder.isSelected.setVisibility(View.INVISIBLE);
            }
        }
    });
}

您需要在回收的視圖數據集中添加屬性,以跟蹤vivble和invisble圖像。

我把這個例子給你做你想做的事。

public class RecyclerViewActivity extends AppCompatActivity { 

private RecyclerView recycler;

@Override 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_recycler_view);
    initView(); 

    List<Item> items = Arrays.asList(
            new Item("1", false), 
            new Item("2", false), 
            new Item("3", false), 
            new Item("4", false), 
            new Item("5", false), 
            new Item("6", false), 
            new Item("7", false), 
            new Item("8", false), 
            new Item("9", false), 
            new Item("10", false), 
            new Item("11", false), 
            new Item("12", false), 
            new Item("13", false), 
            new Item("14", false), 
            new Item("15", false), 
            new Item("16", false), 
            new Item("17", false) 
    ); 

    recycler.setAdapter(new ContactsAdapter(items));
    recycler.setLayoutManager(new LinearLayoutManager(this));

} 


class ContactsAdapter extends RecyclerView.Adapter<ContactsAdapter.ViewHolder> { 
    private List<Item> mItems;

    public ContactsAdapter(List<Item> items) {
        mItems = items;
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new ViewHolder(LayoutInflater.from(
                parent.getContext()).inflate(R.layout.row_recycler, parent, false));
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.bind(position);
    } 

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

    class ViewHolder extends RecyclerView.ViewHolder { 
        TextView mTextView;
        ImageView mImageView;

        ViewHolder(View itemView) {
            super(itemView);

            mTextView = (TextView) itemView.findViewById(R.id.textView);
            mImageView = (ImageView) itemView.findViewById(R.id.imageView);
        } 

        void bind(int position) {
            final Item item = mItems.get(position);
            mTextView.setText(item.getText());

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override 
                public void onClick(View v) {
                    for (Item item1 : mItems) {
                        item1.setImageVisible(false);
                    } 
                    item.setImageVisible(true);

                    notifyDataSetChanged(); 
                } 
            }); 

            if (item.isImageVisible) mImageView.setVisibility(View.VISIBLE);
            else mImageView.setVisibility(View.INVISIBLE);
        } 
    } 
} 


class Item { 
    private String text;
    private boolean isImageVisible;

    public Item(String text, boolean isImageVisible) {
        this.setText(text);
        this.setImageVisible(isImageVisible);
    } 


    public String getText() {
        return text;
    } 

    public void setText(String text) {
        this.text = text;
    } 

    public boolean isImageVisible() { 
        return isImageVisible;
    } 

    public void setImageVisible(boolean imageVisible) {
        isImageVisible = imageVisible;
    } 
} 

private void initView() { 
    recycler = (RecyclerView) findViewById(R.id.recycler);
} 


} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM