2016-02-13 39 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>圍棋與asadmshas's Answer

1

你應避免在使用RecyclerView時手動修改視圖。使用適配器通知*方法將任何更新推送到列表視圖。在特定情況下,我建議使用的List<ItemData>不是數組,然後在onClickListener代碼我應該這樣做:

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

我不能確切地告訴如何將數據用於填充您的RecyclerView,我假設它是itemsData,但是您將從中刪除有問題的項目,然後發出一個notifyItemRemoved(position)調用該適配器。