Как сделать видимым только один элемент списка за один раз в режиме просмотра? - PullRequest
0 голосов
/ 18 сентября 2018

Я использую RecyclerView, и у него есть два TextView с; один для вопроса и один для ответа. Ниже приведен вид для справки. По умолчанию я установил ответ TextView как невидимый для пользователя. Теперь, если пользователь нажимает на кнопку, ответ будет виден. Пока все работает нормально, теперь я хочу, чтобы пользователь, ответивший на вопрос 1, открыл ответ, теперь, если пользователь нажимает вторую кнопку списка, тогда первый ответ TextView должен быть скрыт. Я хочу, чтобы за один раз был виден только один ответ.

Вопрос 1 (кнопка)

Ответ

Вопрос 2 (кнопка)

Ответ

Вопрос 3 (Кнопка)

Ответ

Вопрос 4 (Кнопка)

Ответ

 public class BuyerFaqsAdapter extends RecyclerView.Adapter<BuyerFaqsAdapter.MyViewHolder> {

private ArrayList<BuyerMemberShipFAQParent> brandList;

private Context context;
private int counter;


class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView tvans,tvfaq;
    public ImageView ivImage;

    MyViewHolder(View view) {
        super(view);
        tvfaq = (TextView) view.findViewById(R.id.row_layout_faqtv);
        tvans = (TextView) view.findViewById(R.id.row_layout_answertv);
        ivImage = (ImageView) view.findViewById(R.id.row_layout_ivarrow);
    }
}

public BuyerFaqsAdapter(final Context context, final ArrayList<BuyerMemberShipFAQParent> brandList) {
    this.brandList = brandList;
    this.context = context;

}

@Override
public BuyerFaqsAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    final View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.row_layout_faq_expand_parent, parent, false);


    return new BuyerFaqsAdapter.MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(final BuyerFaqsAdapter.MyViewHolder holder, final int position) {
    holder.tvfaq.setText(brandList.get(position).getFAQParentText());
    holder.tvans.setVisibility(View.GONE);
    holder.tvans.setText(brandList.get(position).getFAQAnswerText());
    holder.itemView.setId(position);
    counter = 1;
    holder.ivImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (counter == 1) {
                holder.tvans.setVisibility(View.VISIBLE);
                holder.ivImage.setImageResource(R.drawable.ic_arrow_faq_up);
                counter = 2;
            }
            else {
                holder.tvans.setVisibility(View.GONE);
                holder.ivImage.setImageResource(R.drawable.ic_arrow_faq);
                counter = 1;
            }
        }
    });
}

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

1 Ответ

0 голосов
/ 18 сентября 2018

Я не проверял это, потому что у меня нет ваших файлов макетов, но вы должны сделать что-то вроде этого:

public class BuyerFaqsAdapter extends RecyclerView.Adapter<BuyerFaqsAdapter.MyViewHolder> {

    private ArrayList<BuyerMemberShipFAQParent> brandList;

    private Context context;
    private MyViewHolder lastClickedHolder;


    public BuyerFaqsAdapter(final Context context, final ArrayList<BuyerMemberShipFAQParent> brandList) {
        this.brandList = brandList;
        this.context = context;

    }

    @Override
    public BuyerFaqsAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        final View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.row_layout_faq_expand_parent, parent, false);


        return new BuyerFaqsAdapter.MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(final BuyerFaqsAdapter.MyViewHolder holder, final int position) {
        holder.tvfaq.setText(brandList.get(position).getFAQParentText());
        holder.tvans.setVisibility(View.GONE);
        holder.tvans.setText(brandList.get(position).getFAQAnswerText());
        holder.itemView.setId(position);

        holder.ivImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (lastClickedHolder != null) {
                    collapse(lastClickedHolder);
                }
                expand(holder);
                lastClickedHolder = holder;
            }
        });
    }

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

    private void collapse(BuyerFaqsAdapter.MyViewHolder holder) {
        holder.tvans.setVisibility(View.VISIBLE);
        holder.ivImage.setImageResource(R.drawable.ic_arrow_faq_up);
    }

    private void expand(BuyerFaqsAdapter.MyViewHolder holder) {
        holder.tvans.setVisibility(View.GONE);
        holder.ivImage.setImageResource(R.drawable.ic_arrow_faq);
    }

    class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView tvans, tvfaq;
        public ImageView ivImage;

        MyViewHolder(View view) {
            super(view);
            tvfaq = (TextView) view.findViewById(R.id.row_layout_faqtv);
            tvans = (TextView) view.findViewById(R.id.row_layout_answertv);
            ivImage = (ImageView) view.findViewById(R.id.row_layout_ivarrow);
        }
    }

}
...