내 앱 안에 Facebook 용 사진 선택 도구를 쓰고 있습니다. 그리드 레이아웃이있는 recyclerview가 있는데 스크롤을 방지하고 싶습니다. scrollToPosition
를 사용하여이 작업을 수행하고이 작품이 아니라 방법은 내가 원하는합니다RecyclerView notifyDataSetChange 최대 스크롤링, 내가 원하는대로 작동하지 않습니다.
문제
내가 그 행이 위쪽으로 이동하고 숫자 1 표시되는 행이되는 2 줄에 사진을 클릭, 3 행을 클릭하면 문제가 발생합니다.
보기가 보이는 경우 리사이클러를 이동하지 않으려면 마지막으로 보이는 행에있는 사진을 클릭하면 스크롤을 동일하게 유지하고 싶습니다. 마지막 행을 첫 번째 행으로 만들고 싶습니다.
내가 내가 다음
setNestedScrollingEnabled
를 호출 시도, 나는이 문제를 해결하기 위해 여러 가지를 시도
그것을 해결하기 위해 시도 나는 어쩌면 스크롤을 사용하지 않도록 설정하면에 recyclerview을 잠글 것이라고 생각이 How to disable RecyclerView scrolling?
public static void onItemClick(int position){
//picker.setNestedScrollingEnabled(false);
for(int k = 0; k<photoBag.size();k++) {
if(k == position)
photoBag.set(position, new PhotoBag(photoBag.get(position).getPhoto(), true)); //Here im marking the photo to selected
else
photoBag.set(k, new PhotoBag(photoBag.get(k).getPhoto(), false));//Here im setting unselecting all the other photos
}
picker.setAdapter(adapter);
adapter.notifyDataSetChanged();
picker.scrollToPosition(position);
//Log.d("FacebookPicker", "position " + grid.findFirstCompletelyVisibleItemPosition());
//picker.setNestedScrollingEnabled(true);
}
corrent 위치 그러나 그것은 바로 위로 뛰지 않았다.
는 또한 오프셋 및 notifyDataSetChange를 호출 후 설정 수직을 받고 시도하지만 난
편집
어댑터
class PickerAdapter extends RecyclerView.Adapter<PickerAdapter.PickerAdapterHolder> {
public final String TAG = "PickerAdapter";
private ArrayList<PhotoBag> photoBag;
private Context context;
private OnClickListener onClickListener;
class PickerAdapterHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView photo;
ImageView imageBorder;
PickerAdapterHolder(View view) {
super(view);
photo = (ImageView) view.findViewById(R.id.photoItem);
photo.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.photoItem:
FacebookPhotoPicker.onItemClick(getAdapterPosition()); //i know that there are better ways to get the clicked item from other class but since im still debuging i don't need to worry about performace i just need it to work
break;
}
}
}
PickerAdapter(Context context, ArrayList<PhotoBag> itemList) {
this.photoBag = itemList;
this.context = context;
}
@Override
public PickerAdapterHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.facebook_picker_item, null);
return new PickerAdapterHolder(layoutView);
}
@Override
public void onBindViewHolder(final PickerAdapterHolder holder, final int position) {
if(photoBag.get(position).isSelected()){
int border = Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, context.getResources().getDisplayMetrics()));
Bitmap photo = photoBag.get(position).getPhoto();
photo = Bitmap.createScaledBitmap(photo,photo.getWidth() - (border*2), photo.getHeight() - (border*2), false);
photo = addWhiteBorder(photo,border);
holder.photo.setImageBitmap(photo);
}else {
holder.photo.setImageBitmap(photoBag.get(position).getPhoto());
}
}
@Override
public int getItemCount() {
return this.photoBag.size();
}
private Bitmap addWhiteBorder(Bitmap bmp, int borderSize) {
Bitmap bmpWithBorder = Bitmap.createBitmap(bmp.getWidth() + borderSize * 2, bmp.getHeight() + borderSize * 2, bmp.getConfig());
Canvas canvas = new Canvas(bmpWithBorder);
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(bmp, borderSize, borderSize, null);
return bmpWithBorder;
}
제가 틀렸을 경우 제게 문제가 생기면 10 개의 항목이 recylerview에 있고 이제는 fb에서 새 항목을 추가하십시오. 지금 아이템을 추가하면 recylerview가 첫 번째 아이템으로 다시 이동합니까? – Hamza
메신저 항목을 추가하지 않고, 내가 사진을 클릭했을 때 오해로 인해 미안하다. 내가 더 명확하게하기 위해 내 질문을 업데이트 할 것이다. 내가 선택한 항목을 업데이트하면 점프한다. –
선택한 항목을 강조 표시하고 싶다. RecyclerView? 탁탁 같이? – Hamza