Есть RecyclerView
в виде сетки из квадратов. Нужно реализовать режим выбора квадрата, то есть при выборе другого квадрата, подсветка у прежнего должна пропадать и подсвечиваться новый квадрат. Подсветка у меня это черный сплошный квадрат поверх квадрата с черной гранью, вот разметка айтема (корневой тэг это квадратный FrameLayout
)
<package.CellSquare xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/square_background">
<View android:id="@+id/cell_choice"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000" />
</package.CellSquare>
Реализация режима выбора (адаптер)
public class GameAdapter extends RecyclerView.Adapter<GameAdapter.AdapterHolder>
{
int choice_position = -1;
public class AdapterHolder extends RecyclerView.ViewHolder implements OnClickListener
{
@Override
public void onClick(View v)
{
choice_position = getAdapterPosition();
notifyDataSetChanged();
}
View choice;
AdapterHolder(View itemView)
{
super(itemView);
choice = itemView.findViewById(R.id.cell_choice);
itemView.setOnClickListener(this);
}
}
public GameAdapter()
{
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView)
{
super.onAttachedToRecyclerView(recyclerView);
}
@Override
public AdapterHolder onCreateViewHolder(ViewGroup viewGroup, int p2)
{
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.square_item, viewGroup, false);
AdapterHolder pvh = new AdapterHolder(v);
return pvh;
}
@Override
public void onBindViewHolder(final AdapterHolder holder, final int position)
{
if(choice_position == position){
holder.choice.setVisibility(View.VISIBLE);
}
else{
holder.choice.setVisibility(View.INVISIBLE);
}
}
@Override
public int getItemCount()
{
return 100;
}
}
Все работает. Но медленно сменяется выбор. Почему?
Решил проблему - notifyDataSetChanged
долго обрабатывает все 100 квадратов, лучше обрабатывать те, которые надо
notifyItemChanged(choice_position);
choice_position = getAdapterPosition();
notifyItemChanged(choice_position);
Так получается быстро.
Добрый деньНаписал приложение в котором есть ListView и написал для нее адаптер
Делаю приложение с обоями, НО возникла проблема с отображением картинки, картинка появляется только после того как я нажимаю на кнопку "Установить...