Скрыть и показать держатель нескольких видов из RecyclerView Adapter Android - PullRequest
2 голосов
/ 18 апреля 2020

У меня есть два держателя вида в моем настраиваемом адаптере:

ViewHolder1 в положении 0 ViewHolder2 в положении 1

В настоящее время с представлением все в порядке.

Теперь у меня есть кнопка в основной деятельности. Я хочу сделать что-то подобное в терминах непрофессионала

При первом щелчке он должен скрыть ViewHolder1 в позиции 0 и сместить ViewHolder2 вверх. При втором щелчке он должен увидеть Viewholder1 в позиции 0 и сместить ViewHolder2 вниз.

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

Возможно, измените видимость всего представления элемента на GONE или VISIBLE, может помочь.

Я не знаю, работает ли это, но теоретически это может работать (потому что вы, кажется, не хотите удалить элементы из источника данных).

Это просто, чтобы дать вам представление о том, что вы можете сделать.

Использовать интерфейс:

public interface itemVisibilityListener{

void itemVisibility(int position,int visibility);
}

В действии:

class MyActivity extends Activity implements itemVisibilityListener{

private int visible = View.VISIBLE;
private int gone = View.GONE;
private boolean firstItemVisible=true;
private MyAdapter adapter;
........

//on create
adapter.setItemVisibilityListener(this);

//when button clicked
button.setOnClickListener(new....{

if(firstItemVisible){
adapter.hideItem1(true); 
}else{
adapter.hideItem1(false);
}



});



//this callback gives you feedback on visibility of first item
@override
public void itemVisibility(int position , int visibility){

button.setEnabled(true);

if(position==0 && visibility==visible){

 //item of position 0 is visible

  firstItemVisible=true;

}else if(position==0 && visibility==gone){

//item of position 0 is not visible
 firstItemVisible=false;

}



}


}

В вашем адаптере:

class MyAdapter extends .......{

private int visible = View.VISIBLE;
private int gone = View.GONE;
private boolean hide = false;
private itemVisibilityListener listener;

public void hideItem1(boolean hide){

this.hide=hide;
this.notifyDataSetChanged();

}

public void setItemVisibilityListener(itemVisibilityListener listener){

this.listener=listener;

}

.........

//on bind view holder
//this is your logic for handling multiple viewholders

public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int postion){

if(holder.getItemViewType == FIRST_ITEM_TYPE){

//item 1 binding

if(hide){
holder.itemView.setVisibility(gone);
listener.itemVisibility(0,gone);

}else{
holder.itemView.setVisibility(visible);
listener.itemVisibility(0,visible);
}

}else if(holder.getItemViewType == SECOND_ITEM_TYPE){

//item 2 binding......

}


}


}
0 голосов
/ 18 апреля 2020

Если ваши данные представлены в таком списке, как

data = mutableListOf<BaseClass>(item1, item2)

, вы можете удалить 1-го держателя просмотра, обновив данные и уведомив свой адаптер

data.remove(0)
adapter.notifyItemRemoved(0)

, а затем хотите добавить его снова, вы делаете

data.add(0, item1)
adapter.notifyItemInserted(0)

См. это для справки.

...