我在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
按下后隐藏mSendBooking
。 mFormBookingan
永远不再显示,直到用户再次调用它。
我尝试了很多方法,但仍然找不到我需要的东西。按mSendBooking
表单隐藏后,但当我将新项目发送到recyclerview时,已隐藏的mFormBookingan
再次出现。
我的问题,如何永远隐藏mFormBookingan
?在用户再次呼叫之前。
提前感谢,我将非常感谢帮助我的人。
答案 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后它将保持不变。