Android 在recyclerview'中隐藏视图;s项目
我在recyclerview的项目中遇到了一个问题 我的适配器代码: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){
@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时,已隐藏的frommFormBookingan
再次出现
我的问题,如何永远隐藏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
。我编辑我的问题您需要在模型类中使用布尔值来跟踪按钮可见性,我已经发布了一个解决方案。检查一下,让我知道是否有帮助我建议