2016-04-26 15 views
5

मुझे समस्या का सामना करना पड़ रहा है, मैं RecyclerView में कोई आइटम नहीं हटा सका। मैं इंटरनेट में खोज करने के लिए कोशिश कर रहा हूँ, लेकिन किसी भी समाधान नहीं देख सकता था मैं इस पोस्ट Android RecyclerView addition & removal of items लिए अनुसरण कर रही हूं लेकिन मैं अभी भी नहीं निकाल सका आइटम का चयन किया नीचे मेरी एडाप्टर और fragementरीसाइक्लर व्यू में एक आइटम निकालें- एंड्रॉइड

RecyclerViewAdapter के लिए मेरे कोड है। जावा

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 

}

मैं एडाप्टर कक्षा के अंदर कोई आइटम नहीं हटा सका। कोई भी मेरी मदद कर सकता है?

+0

आप [Github में इस उदाहरण] (https://github.com/CabezasGonzalezJavier/FullRecycleView/tree/master/app/src/main/java/com/thedeveloperworldisyours/fullrecycleview देख सकते हैं/लंबवत) हैप्पी कोड !!!! – Cabezas

उत्तर

10

सही स्थिति निकालने के लिए आप holder.getAdapterPosition() फोन और सभी निकालने के लिए इस मान का उपयोग और संचालन को सूचित करना चाहिए पाने के लिए। एंड्रॉइड स्टूडियो इसके लिए एक चेतावनी दिखाता है, इसलिए पहले चेतावनियों की जांच करना सुनिश्चित करें। और 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(); 
संबंधित मुद्दे