2016-02-13 2 views
0

В следующем коде я смог удалить изображение с помощью imgBtn, но мои изображения не прокручивают позицию удалённого изображения, она просто остается в текущей позиции, она не обновляется.RecyclerView Позиция позиции не получает обновления

Основная деятельность Класс

ItemData itemsData[] = {new ItemData("Help", R.drawable.image), 
      new ItemData("Delete", R.drawable.orange), 
      new ItemData("Cloud", R.drawable.image), 
      new ItemData("Favorite", R.drawable.orange), 
      new ItemData("Like", R.drawable.image), 
      new ItemData("Rating", R.drawable.orange)}; 

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); 
recyclerView.setHasFixedSize(true); 
LinearLayoutManager llm = new LinearLayoutManager(this); 
llm.setOrientation(LinearLayoutManager.HORIZONTAL); 
recyclerView.setLayoutManager(llm); 
CustomAdapter mAdapter = new CustomAdapter(itemsData); 
recyclerView.setAdapter(mAdapter); 

ItemData Класс

public class ItemData { 
private String title; 
private int imageUrl; 

public ItemData(String title,int imageUrl){ 

    this.title = title; 
    this.imageUrl = imageUrl; 
} 
String getTitle(){return title;} 
void setTitle(String t){title = t;} 
int getImageUrl(){return imageUrl;} 
void setImageUrl(int t){imageUrl = t;} 
} 

Пользовательский адаптер класса

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> 
{ 
    private ItemData[] itemsData; 
    private Context context; 
    private CustomAdapter thisAdapter = this; 

    public CustomAdapter(ItemData[] itemsData) { 
     this.itemsData = itemsData; 
    } 


@Override 
public void onBindViewHolder(ViewHolder viewHolder, int pos) { 
    final int position = pos; 

    viewHolder.imgViewIcon.setImageResource(itemsData[position].getImageUrl()); 
    viewHolder.imgBtn.setImageResource(R.drawable.ic_close_black_24dp); 

    viewHolder.imgBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      ((FrameLayout) v.getParent()).removeAllViews(); 
     } 
    }); 
} 

} 
+0

вы хотите удалить изображение из этой позиции –

+0

я мог в состоянии выбранного изображения из этой позиции '((FrameLayout) v.getParent()). RemoveAllViews();', но другие позиции изображений не обновляются. Удаленное изображение остается пустым без изображения. – casillas

ответ

1

Если вы хотите удалить Элемент из recylerview. Не делайте этого так.

Поскольку вы используете ItemData [] массив

List<ItemData> numlist = new ArrayList<ItemData>(); 
for(int i= 0;i<itemsData.length;i++) 
{ 
    if(i == position) 
    { 
     // No operation here 
    } 
    else 
    { 
     numlist.add(arr_fav[i]); 
    } 
} 
itemsData = numlist.toArray(new String[numlist .size()]); 
notifyItemRemoved(position); 
notifyItemRangeChanged(0, mDataset.size()); 

Если преобразовать его в List<ItemData> Go с asadmshas's Answer

1

You следует избегать ручного изменения представлений при использовании RecyclerView. Использование адаптеров уведомляет * методы для push-обновления в виде списка. В вашем конкретном случае я хотел бы предложить, используя List<ItemData> вместо массива, а затем в вашем onClickListener код, который я хотел бы сделать это:

@Override 
public void onClick(View v) { 
    itemsData.remove(position); 
    notifyItemRemoved(position); 
} 

Я не могу точно сказать, каким образом данные используются для заполнения вашего RecyclerView, Я предполагаю, что это itemsData, но вы удалили бы этот предмет из него, а затем вышли бы вызов notifyItemRemoved(position) на этот адаптер.

Смежные вопросы