Я звоню notifyItemChanged(position)
из цикла for, чтобы установить ImageViewVisibility = inVisible
, но все виды изображений отображаются сразу после окончания цикла for
.Принимая во внимание, что я хочу показать / скрыть imageView по одному.Что мне нужно сделать, чтобы это исправить?
Текущий вывод:
Все изображения отображаются сразу все вместе, когда заканчивается цикл.(Я имею в виду, что метод OnBindviewHolder вызывается только после окончания цикла for
`
Ожидаемый результат:
Что касается циклов, выполняемых для каждого индекса, я хочу показать/ скрыть imageView для каждой строки одну за другой (я имею в виду OnBindviewHolder
метод должен вызываться при вызове каждого for
цикла)
Что я пробовал:
Я пробовал notifyItemChanged(pos);
, notifyDataSetChanged();
, notifyItemInserted(pos);
, но ни один из них не помог мне получить ожидаемый результат. Я также попробовал https://stackoverflow.com/a/35392153/1684778, но все еще тот же выход.
активность
private List<Multiples> items = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_result);
recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
// use a linear layout manager
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
// specify an adapter (see also next example)
items.addAll(DataGenerator.getPeopleData(this, of, value));
mAdapter = new MyAdapter(items);
recyclerView.setAdapter(mAdapter);
//----------now give few seconds untill all default data is loaded in the recyclerView----------------
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//--------------Now call for loop on every 2 seconds so that we can hide or show ImageViews in each 2 seconds
MyAdapter m= (MyAdapter) mAdapter;
for (Multiples item : items) {
Multiples multiples1=items.get(items.indexOf(item));
multiples1.setImageShow(true); // set true to hide loop
Log.i("ms","----------in activity--------"+items.indexOf(item));
m.updateItem(item,items.indexOf(item)); // forward each row to adapter to take effect
try { // sleep for 2 seconds so that we can see the effect of above code(hide/show imageView for this row index items.indexOf(item)
Log.i("s","##################### going to sleep #######################"+items.indexOf(item) );
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}, 2500);
}
адаптер
public void updateItem(final Multiples newItem, final int pos) {
newItem.setImageShow(true);
items.set(pos, newItem); //update passed value in your adapter's data structure
notifyItemChanged(pos);
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
// - get an element from your dataset at this position
// - replace the contents of the view with that element
if (holder instanceof MyAdapter.MyViewHolder) {
final MyAdapter.MyViewHolder view = (MyAdapter.MyViewHolder) holder;
final Multiples p = items.get(position);
view.name.setText(p.first + " X " + p.getSecond() + "= " + p.getResult());
// if(position>0) {
if (p.imageShow) {
view.image1.setVisibility(View.VISIBLE);
view.image.setVisibility(View.INVISIBLE);
} else {
view.image1.setVisibility(View.INVISIBLE);
view.image.setVisibility(View.VISIBLE);
}
}
// }
}