Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在recyclerview'中隐藏视图;s项目_Android_Android Recyclerview_Adapter - Fatal编程技术网

Android 在recyclerview'中隐藏视图;s项目

Android 在recyclerview'中隐藏视图;s项目,android,android-recyclerview,adapter,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){

我在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);
                }
            });
}
像上面的代码一样,我想在按下
mSendBooking
后隐藏
mFormBookingan
<代码>mFormBookingan在用户再次调用之前,不会再显示

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

我的问题,如何永远隐藏
mFormBookingan
?直到用户再次调用它。


提前感谢,我将非常感谢为我提供帮助的任何人。

更改viewable的值后,您可能需要调用
NOTIFYDATASETCHANGE()

更改viewable的值后,您可能需要调用
NOTIFYDATASETCHANGE()

我不确定您想要的明确情况。 但如果您想将视图设置为不可见,可以尝试此代码,然后进行检查

您需要将ismFormBookingVisible作为布尔属性添加到viewHolder类中

@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);
                }

我不知道你想要什么样的情况。 但如果您想将视图设置为不可见,可以尝试此代码,然后进行检查

您需要将ismFormBookingVisible作为布尔属性添加到viewHolder类中

@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);
                }

当您通知数据集时,将调用onBindViewHolder

因此,您需要将可查看的保存在mlistchating中。单击按钮时,在mlistchating中更改可查看的

然后,更改onBindViewHolder中的代码

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

当您通知数据集时,将调用onBindViewHolder

因此,您需要将可查看的保存在mlistchating中。单击按钮时,在mlistchating中更改可查看的

然后,更改onBindViewHolder中的代码

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

在模型类“Profile”中创建一个布尔值,以跟踪按钮的可见性:假设布尔值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);
                }
            });
}
试试这个:

在模型类“Profile”中创建一个布尔值,以跟踪按钮的可见性:假设布尔值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);
                }
            });
}

刷新时,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);
            }
        }
    });
}
私有数组列表可见;
公共MyAdapter(ArrayList可见){
//列表每行的mFormBookingan初始状态列表
this.isVisible=isVisible;
}
公共无效onBindViewHolder(最终MyViewHolder,最终int位置){
如果(可见。获取(位置)){
holder.mFormBookingan.setVisibility(View.VISIBLE);
}否则{
holder.mFormBookingan.setVisibility(View.GONE);
}
holder.mSendBooking.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(holder.mFormBookingan.getVisibility()==View.GONE){
holder.mFormBookingan.setVisibility(View.VISIBLE);
isVisible.set(位置,true);
}否则{
holder.mFormBookingan.setVisibility(View.GONE);
isVisible.set(位置,false);
}
}
});
}

当您单击mSendBooking时,mFormBookingan可见性将更改,并且在将新项目发送到recyclerview后将保持不变。

刷新时,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);
            }
        }
    });
}
私有数组列表可见;
公共MyAdapter(ArrayList可见){
//列表每行的mFormBookingan初始状态列表
this.isVisible=isVisible;
}
公共无效onBindViewHolder(最终MyViewHolder,最终int位置){
如果(可见。获取(位置)){
holder.mFormBookingan.setVisibility(View.VISIBLE);
}否则{
holder.mFormBookingan.setVisibility(View.GONE);
}
holder.mSendBooking.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(holder.mFormBookingan.getVisibility()==View.GONE){
holder.mFormBookingan.setVisibility(View.VISIBLE);
isVisible.set(位置,true);
}否则{
holder.mFormBookingan.setVisibility(View.GONE);
isVisible.set(位置,false);
}
}
});
}

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

mFormBooking是否等于mFormBooking?我找不到mFormBooking。对不起,我是说,
mFormBooking
。我编辑我的问题您需要在模型类中使用布尔值来跟踪按钮可见性,我已经发布了一个解决方案。检查并让我知道是否有帮助..那是mFormBooking等于mFormBookingan吗?我找不到mFormBooking。对不起,我是说,
mFormBooking
。我编辑我的问题您需要在模型类中使用布尔值来跟踪按钮可见性,我已经发布了一个解决方案。检查一下,让我知道是否有帮助我建议