2016-04-26 133 views
5

我面临一个问题,我无法删除RecyclerView中的项目。 我想在互联网上进行搜索,但没有看到任何解决方案 我下面这个帖子 Android RecyclerView addition & removal of items 但我还是项目选择 下面是我为我的适配器和fragement删除RecyclerView中的一个项目 - Android

RecyclerViewAdapter代码无法删除。的java

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> { 
List<VideoDetails> contents2; 
Context mContext; 
ImageLoader imageLoader; 
static final int TYPE_HEADER = 0; 
static final int TYPE_CELL = 1; 
public RecyclerViewAdapter(List<VideoDetails> contents) { 
    this.contents2 = contents; 
} 
public RecyclerViewAdapter(Context context, List<VideoDetails> contents) { 
    mContext = context; 
    this.contents2 = contents; 
    imageLoader = new ImageLoader(context); 
} 
@Override 
public int getItemViewType(int position) { 
    return position; 

} 
@Override 
public int getItemCount() { 
    return contents2.size(); 
} 
@Override 
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) { 
    View view = null; 
    view = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.list_item_card_small2, parent, false); 
    ViewHolder vh = new ViewHolder(view); 
    return vh; 
} 
@Override 
public void onBindViewHolder(ViewHolder holder,final int position) { 
    holder.title.setText(contents2.get(position).getTitle()); 
    holder.image.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View view) { 
      Log.d("thien.van","on Click onBindViewHolder"); 
      contents2.remove(position); 
      notifyItemRemoved(position); 
      notifyItemRangeChanged(position, contents2.size()); 

     } 
    }); 
} 
public Bitmap getThumbnail(String str) { 

    Bitmap bMap = ThumbnailUtils.createVideoThumbnail(str, MediaStore.Video.Thumbnails.MINI_KIND); 
    return bMap; 
} 
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 


    public TextView title; 
    public ImageView image; 
    public ProgressBar progressBar; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     title = (TextView) itemView.findViewById(R.id.title); 
     image = (ImageView) itemView.findViewById(R.id.thumbnail); 
     progressBar = (ProgressBar) itemView.findViewById(R.id.progress); 
     // image.setOnClickListener(this); 
    } 
    @Override 
    public void onClick(View view) { 
     Log.d("thien.van","onClick getAdapterPosition   () = "+getAdapterPosition()); 
     removeAt(getAdapterPosition()); 
    } 
} 
public void removeAt(int position) { 
    contents2.remove(position); 
    notifyDataSetChanged(); 
} 

}

RecyclerViewFragment

public class RecyclerViewFragment extends Fragment { 

private RecyclerView mRecyclerView; 
private RecyclerView.Adapter mAdapter; 

private static final int ITEM_COUNT = 2; 

private List<Object> mContentItems = new ArrayList<>(); 
private static List<VideoDetails> mContentItems2 = new ArrayList<>(); 

public static RecyclerViewFragment newInstance() { 
    return new RecyclerViewFragment(); 
} 

public static RecyclerViewFragment newInstance(List<VideoDetails> contentItems) { 
    RecyclerViewFragment myFragment = new RecyclerViewFragment(); 
    // mContentItems = contentItems; 
    Bundle args = new Bundle(); 
    args.putSerializable("thienvan", (Serializable) contentItems); 
    myFragment.setArguments(args); 
    return myFragment; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    mContentItems2 = (List<VideoDetails>) getArguments().getSerializable("thienvan"); 
    // Log.d("thien.van","Fragment file name = "+mContentItems2.get(0).getTitle()); 
    return inflater.inflate(R.layout.fragment_recyclerview, container, false); 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); 
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
    mRecyclerView.setLayoutManager(layoutManager); 
    //mRecyclerView.setHasFixedSize(true); 

    mAdapter = new RecyclerViewMaterialAdapter(new RecyclerViewAdapter(getActivity().getBaseContext(),mContentItems2)); 
    mRecyclerView.setAdapter(mAdapter); 

    /*{ 
     for (int i = 0; i < ITEM_COUNT; ++i) 
      mContentItems.add(new Object()); 
     mAdapter.notifyDataSetChanged(); 
    }*/ 

    MaterialViewPagerHelper.registerRecyclerView(getActivity(), mRecyclerView, null); 
} 
//http://android--code.blogspot.com/2015/12/android-recyclerview-add-remove-item.html 

}

我无法删除Adapter类中的项目。 有人可以帮助我吗?

+0

你可以看到[在Github上这个示例](https://github.com/CabezasGonzalezJavier/FullRecycleView/tree/master/app/src/main/java/com/thedeveloperworldisyours/fullrecycleview /垂直)快乐代码!!!! – Cabezas

回答

10

要获得正确的删除位置,应该调用holder.getAdapterPosition()并将该值用于所有删除和通知操作。 Android studio会为此发出警告,因此请务必首先检查警告。为什么getItemCount你返回2?

public void onClick(View view) { 
    int newPosition = holder.getAdapterPosition(); 
    Log.d("thien.van","on Click onBindViewHolder"); 
    contents2.remove(newPosition); 
    notifyItemRemoved(newPosition); 
    notifyItemRangeChanged(newPosition, contents2.size()); 

} 
+0

嗨lulianI,我返回2检查解决方案,我也打电话{holder.getAdapterPosition()}但问题仍然存在 – user3157841

+0

因此,你的代码删除匹配我刚刚发布? –

+0

我已经收回了我的代码并应用了您的建议,但仍未删除 – user3157841

0

从列表中删除单个项目

删除 “猪”。

Remove single item

int removeIndex = 2; 
data.remove(removeIndex); 
adapter.notifyItemRemoved(removeIndex); 

从列表中删除多个项目

删除 “骆驼” 和 “羊”。

Remove multiple items

int startIndex = 2; // inclusive 
int endIndex = 4; // exclusive 
int count = endIndex - startIndex; // 2 items will be removed 
data.subList(startIndex, endIndex).clear(); 
adapter.notifyItemRangeRemoved(startIndex, count); 

移除所有项目

清除整个列表。

Remove all items

data.clear(); 
adapter.notifyDataSetChanged(); 
相关问题