2016-04-26 7 views
5

Ich stehe vor einem Problem, ich konnte ein Element in RecyclerView nicht entfernen. Ich versuche, in Internet zu suchen, aber keine Lösung sehen konnte verfolge ich auf diesen Beitrag Android RecyclerView addition & removal of items Aber ich konnte immer noch nicht entfernen, der Punkt Im Folgenden ausgewählt ist mein Code für meinen Adapter und BruchstückEntfernen Sie ein Element in 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 

}

Ich konnte ein Element innerhalb der Adapterklasse nicht entfernen. Jeder könnte mir helfen?

+0

können Sie sehen [dieses Beispiel in Github] (https://github.com/CabezasGonzalezJavier/FullRecycleView/tree/master/app/src/main/java/com/thedeveloperworldisyours/fullrecycleview/vertikal) Glücklicher Code !!!! – Cabezas

Antwort

10

Um die richtige Position für Entfernen zu erhalten, sollten Sie holder.getAdapterPosition() anrufen und diesen Wert für alle entfernen und benachrichtigen Operationen verwenden. Android Studio zeigt hierfür eine Warnung an. Überprüfen Sie daher zuerst die Warnungen. Und warum für getItemCount Sie 2 zurückgeben?

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

Hallo lulianI, ich gebe 2 zurück, um die Lösung zu überprüfen, ich rufe auch {holder.getAdapterPosition()}, aber das Problem tritt immer noch auf – user3157841

+0

Ihr Code für remove entspricht also dem, den ich gerade gepostet habe? –

+0

Ich habe meinen Code wiedergefunden und Ihren Vorschlag angewendet, aber immer noch nicht entfernen – user3157841

0

entfernen einzelne Artikel

Remove "Schwein" aus der Liste.

Remove single item

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

mehrere Artikel

Remove "Camel" und "Sheep" aus der Liste entfernen.

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); 

alle Artikel entfernen die ganze Liste

löschen.

Remove all items

data.clear(); 
adapter.notifyDataSetChanged();