Вывод с камеры готовых изображений в ListView
Нужна помощь с вводом изображений в ListView. Есть готовый код для создания снимков и сохранение их в ImageView. Но я не знаю как сделать что бы после создания изображение они выводились списком в ListView.
Код камеры:
public class Fragment2 extends Fragment {
DatabaseHelper sqlHelper;
SQLiteDatabase db;
ListView listphoto;
Button bsphoto;
SimpleCursorAdapter Adapter;
final int CAMERA_REQUEST = 1;
final int PIC_CROP = 2;
private Uri picUri;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_fragment2, container, false);
bsphoto = view.findViewById(R.id.bsphoto);
sqlHelper = new DatabaseHelper(getActivity());
db = sqlHelper.getWritableDatabase();
// Adapter = new SimpleCursorAdapter(view.getContext(), R.layout.activity_fragment2,
// new DatabaseHelper(getActivity()),
// new String[]{DatabaseHelper.COLUMN_PHOTO},
// new int[]{R.id.imageViewPhoto});
// listphoto = view.findViewById(R.id.listViewCollectionPhoto);
// listphoto.setAdapter(Adapter);
bsphoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(captureIntent, CAMERA_REQUEST);
} catch (ActivityNotFoundException e) {
String errorMessage = "ERROR";
// Toast toast = Toast
// .makeText(this, errorMessage, Toast.LENGTH_SHORT);
// toast.show();
}
}
});
return view;
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == PIC_CROP) {
picUri = data.getData();
performCrop();
}else if (requestCode == CAMERA_REQUEST ) {
Bundle extras = data.getExtras();
Bitmap thePic = extras.getParcelable("data");
ImageView picView = getActivity().findViewById(R.id.pic);
picView.setImageBitmap(thePic);
}
}
}
}
В коде есть закомментированные мои безуспешные попытки это сделать.
Adapter = new SimpleCursorAdapter(view.getContext(), R.layout.activity_fragment2,
new DatabaseHelper(getActivity()),
new String[]{DatabaseHelper.COLUMN_PHOTO},
new int[]{R.id.imageViewPhoto});
listphoto = view.findViewById(R.id.listViewCollectionPhoto);
listphoto.setAdapter(Adapter);
Ответы (1 шт):
Вместо ListView, используйте RecyclerView. Для него нужно создать адаптер, например такой
public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {
private List<Bitmap> mData = new ArraList<>();
public void setImage(Bitmap bitmap) {
mData.add(bitmap);
notifyDataSetChanged();
}
// recyclerview_row - нужно также создать, ниже будет пример
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.recyclerview_row, parent, false);
return new ViewHolder(view);
}
// вставляем картинку в каждый imageview из списка
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String bitmap = mData.get(position);
holder.myImageView.setImageBitmap(bitmap);
}
@Override
public int getItemCount() {
return mData.size();
}
// тут инициализируем imageview из recyclerview_row
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView myImageView;
ViewHolder(View itemView) {
super(itemView);
myImageView = itemView.findViewById(R.id.imageView);
}
}
Вот xml recyclerview_row
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true" />
</RelativeLayout>
Далее в вашем Fragment2 инициализируете RecyclerView вставляете в него адаптер
RecyclerView recyclerView = findViewById(R.id.rvAnimals);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new MyRecyclerViewAdapter();
recyclerView.setAdapter(adapter);
После чего например в onActivityResult у вас или где угодно, можно вызвать
adapter.setImage(bitmap)
И будете по одному битмапу добавлять в список. Можно в адаптере сделать похожий на setImage(Bitmap bitmap), но, например со списком, типа
public void setImageList(List<Bitmap> bitmaps) {
mData.clear();
mData.addAll(bitmaps);
notifyDataSetChanged();
}
И можно целым списком вставить битмапы