在recyclerview的项目中隐藏视图

时间:2016-07-21 02:42:09

标签: android android-recyclerview adapter

我在recyclerview的项目中遇到问题。

我的适配器代码:

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
    Profile item = mListChatting.get(position);

        Log.d("TAG", "CEK : " + viewable);

        if(viewable==true){
    holder.mFormBookingan.setVisibility(View.GONE);
            holder.mDetailBookingan.setVisibility(View.VISIBLE);
        }else{
            //assume that one way is show first as default
             holder.mViewOneWay.setVisibility(View.VISIBLE);
             holder.mViewRoundTrip.setVisibility(View.GONE);
             holder.mOneOway.setBackgroundResource(R.drawable.round_just_left_white_focus);
             holder.mRoundTrip.setBackgroundResource(R.drawable.state_pressed_booking_button_left);
             holder.mSendBooking.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    viewable = true;
                    Log.d("TAG", "CEK 2 : " + viewable);
                }
            });
}

与上面的代码一样,我想在mFormBookingan按下后隐藏mSendBookingmFormBookingan永远不再显示,直到用户再次调用它。

我尝试了很多方法,但仍然找不到我需要的东西。按mSendBooking表单隐藏后,但当我将新项目发送到recyclerview时,已隐藏的mFormBookingan再次出现。

我的问题,如何永远隐藏mFormBookingan?在用户再次呼叫之前。

提前感谢,我将非常感谢帮助我的人。

5 个答案:

答案 0 :(得分:2)

我不确定你想要的明确情况。 但是如果你想设置View隐形,你可以尝试这个代码,然后检查它。

您需要在viewHolder类中添加ismFormBookingVisible作为布尔属性。

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
    Profile item = mListChatting.get(position);

        Log.d("TAG", "CEK : " + viewable);

        if(holder.ismFormBookingVisible==true){
    holder.mFormBookingan.setVisibility(View.GONE);
            holder.mDetailBookingan.setVisibility(View.VISIBLE);
        }else{
            //assume that one way is show first as default
             holder.mViewOneWay.setVisibility(View.VISIBLE);
             holder.mViewRoundTrip.setVisibility(View.GONE);
             holder.mOneOway.setBackgroundResource(R.drawable.round_just_left_white_focus);
             holder.mRoundTrip.setBackgroundResource(R.drawable.state_pressed_booking_button_left);
             holder.mSendBooking.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    holder.ismFormBookingVisible = false;
                    Log.d("TAG", "CEK 2 : " + viewable);
                }

答案 1 :(得分:2)

试试这个:

在模型类中创建一个布尔值" Profile"跟踪按钮的可见性:比如boolean isBookingVisible;

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
    Profile item = mListChatting.get(position);

        if(!item.isBookingVisible){
    holder.mFormBookingan.setVisibility(View.GONE);
            holder.mDetailBookingan.setVisibility(View.VISIBLE);
        }else{
            //assume that one way is show first as default
             holder.mViewOneWay.setVisibility(View.VISIBLE);
             holder.mViewRoundTrip.setVisibility(View.GONE);
             holder.mOneOway.setBackgroundResource(R.drawable.round_just_left_white_focus);
             holder.mRoundTrip.setBackgroundResource(R.drawable.state_pressed_booking_button_left);
             holder.mSendBooking.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    item.isBookingVisible = false;
                    //Use notiyItemChanged(position); or notifyDataSetChanged(); here as per your selection criterion
                    Log.d("TAG", "CEK 2 : " + viewable);
                }
            });
}

答案 2 :(得分:0)

更改可查看的值后,您可能需要致电notifyDataSetChanged()

答案 3 :(得分:0)

通知数据集时,将调用

onBindViewHolder

因此您需要在 mListChatting 中保存可查看。点击按钮后,更改 mListChatting 中的可查看

然后,更改onBindViewHolder中的代码

holder.mFormBookingan.setVisibility(item.getViewable() ? View.VISIBLE : View.GONE);

答案 4 :(得分:0)

在刷新时,android会破坏视图并使用新的适配器数据创建新视图。因此,您必须跟踪 mFormBookingan 的当前状态(可见性)。您可以使用简单的可见性列表。当 mFormBookingan 状态(可见性)更改时,在可见性列表中更新它,以便每当刷新列表时,您可以使用它来检查并设置 mFormBookingan 。这是一个例子

private ArrayList<Boolean> isVisible;

public MyAdapter(ArrayList<Boolean> isVisible){
    // initial state list of mFormBookingan for each row of list
    this.isVisible = isVisible;
}

public void onBindViewHolder(final MyViewHolder holder, final int position) {
    if (isVisible.get(position)) {
        holder.mFormBookingan.setVisibility(View.VISIBLE);
    }else {
        holder.mFormBookingan.setVisibility(View.GONE);
    }
    holder.mSendBooking.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (holder.mFormBookingan.getVisibility() == View.GONE){
                holder.mFormBookingan.setVisibility(View.VISIBLE);
                isVisible.set(position, true);
            }else {
                holder.mFormBookingan.setVisibility(View.GONE);
                isVisible.set(position, false);
            }
        }
    });
}

当您点击 mSendBooking 时, mFormBookingan 的可见性会发生变化,并且在将新项目发送到recyclerview后它将保持不变。