recyclerview 및 어댑터를 처음 사용합니다. RecyclerView와 Onclick이 작동합니다 (Google 덕분에 : https://github.com/googlesamples/android-RecyclerView). 그것은 로그에 쓰는 setOnClickListener를 가지고 있습니다. 하지만 내가 클릭 할 때 목록에서 항목을 제거하는 방법을 알아 내려고 노력하고있어 - 어댑터를 사용하는 ArrayList로 이동하여 notifyItemInserted를 실행하여 디스플레이를 업데이트하는 방법을 알 수 없다.OnClick에서 어댑터 내의 항목을 제거하는 데 문제가 있습니다.
다른 게시물 (Android RecyclerView 추가 & 항목 삭제 - Android RecyclerView addition & removal of items)을 검토하는 중 낙원/자레드 버로우 스가 실행되도록 만들었습니다. 그러나 일부 코드가 누락 된 것처럼 보였고 누군가가 나를 위해 구멍을 채울 수 있기를 바랬습니다. (나는이 다른 포스트에 질문을하기 위해 그곳에 질문 할 수 없었다).
예를 들어 어디서나 mItemClickListener가 정의되어 있지는 않습니다. RecyclerView.Adapter를 확장하는 클래스와 RecyclerView.ViewHolder를 확장하는 클래스 사이의 연결도 확실하지 않습니다. 여기
내 RecyclerView.Adapter입니다 : 내가 다른 StackOverflow의 질문에서 어댑터를 사용하는 것을 시도하고있다public class RVAdapter1 extends RecyclerView.Adapter<RVAdapter1.ViewHolder> {
private static final String TAG = "debug";
private int itemCounter = 0;
private List<String> feedItemList;
public static class ViewHolder extends RecyclerView.ViewHolder {
private final TextView textView;
public ViewHolder(View v) {
super(v);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "Element " + getPosition() + " clicked.");
//feedItemList.remove(getPosition());
//notifyItemRemoved(getPosition());
}
});
textView = (TextView) v.findViewById(R.id.textView);
}
public TextView getTextView() {
return textView;
}
}
public RVAdapter1(List<String> dataSet) {
feedItemList = dataSet;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.text_row_item, viewGroup, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
Log.d(TAG, "Element " + position + " set.");
viewHolder.getTextView().setText(String.valueOf(feedItemList.get(position)));
}
@Override
public int getItemCount() {
return feedItemList.size();
}
public void addItem(int position, String data) {
feedItemList.add(position, data);
notifyItemInserted(position);
Log.d(TAG,"adapter list length=" + feedItemList.size());
}
}
,하지만 난 연결하는 방법이 확실 (? 또는 결합) 두 개의 어댑터를 어디서 mItemClickListener는에서 온 것입니다.
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public CardView mCardView;
public TextView mTextViewTitle;
public TextView mTextViewContent;
public ImageView mImageViewContentPic;
//......
public ImageView imgViewRemoveIcon;
public ViewHolder(View v) {
super(v);
mCardView = (CardView) v.findViewById(R.id.card_view);
mTextViewTitle = (TextView) v.findViewById(R.id.item_title);
mTextViewContent = (TextView) v.findViewById(R.id.item_content);
mImageViewContentPic = (ImageView) v.findViewById(R.id.item_content_pic);
//......
imgViewRemoveIcon = (ImageView) v.findViewById(R.id.remove_icon);
mTextViewContent.setOnClickListener(this);
imgViewRemoveIcon.setOnClickListener(this);
v.setOnClickListener(this);
mTextViewContent.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
if (mItemClickListener != null) {
mItemClickListener.onItemClick(view, getPosition());
}
return false;
}
});
}
@Override
public void onClick(View v) {
//Log.d("View: ", v.toString());
//Toast.makeText(v.getContext(), mTextViewTitle.getText() + " position = " + getPosition(), Toast.LENGTH_SHORT).show();
if(v.equals(imgViewRemoveIcon)){
removeAt(getPosition());
}else if (mItemClickListener != null) {
mItemClickListener.onItemClick(v, getPosition());
}
}
}
public void setOnItemClickListener(final OnItemClickListener mItemClickListener) {
this.mItemClickListener = mItemClickListener;
}
public void removeAt(int position) {
mDataset.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(getPosition, mDataSet.size());
}
이것은 사소한 질문 일지 모르지만 나는 누군가가 기꺼이 제공 할 수있는 도움에 감사 할 것입니다 ... 감사합니다!
답장을 보내 주셔서 감사합니다. 내 문제는 어떤 항목을 클릭했는지 알 수 없지만 ArrayList에 액세스 할 수 없어서 OnClick이 있던 코드에서 항목을 제거 할 수 없다는 것이 아닙니다. 아래 내 대답을 참조하십시오. – dbaddorf