Как заполнить imageViews в ListView фотографиями с камеры в элементе, где была нажата кнопка? - PullRequest
0 голосов
/ 30 января 2019

Я здесь, чтобы попросить вас помочь с этим: у меня есть MainActivity с listView и DetailsActivity с подробной информацией об элементе, выбранном в listView MainActivity.В этой DetailsActivity у меня также есть другой listView, где у каждого элемента есть imageView и кнопка.Когда эта кнопка нажата, намерение запускает камеру.Пока все хорошо.

Проблемы таковы:

  • как-то, мне нужно передать положение нажатой кнопки до цели, а затем вернуть ее обратно, так чтоТеперь я выясню, какое изображение должно заполняться фотографией;

  • намерение запускается из адаптера listView, который расширяет baseAdapter, но где должен быть размещен onActivityResult?

  • после съемки фотографии вместо возврата к DetailsActivity открывается MainActivity;

LVФотоадаптер:

public class LVPhotoAdapter extends BaseAdapter {

    private Context context;
    private final List<Photo> items;
    private static final int CAMERA_REQUEST = 1888;
    ImageView imageView;

    public LVPhotoAdapter(Context context, final List<Photo> items) {

        this.context = context;
        this.items = items;
    }

    public int getCount() { return this.items.size(); }

    public Object getItem(int arg0) { return this.items.get(arg0); }

    public long getItemId(int arg0) { return arg0; }

    public View getView(int arg0, View arg1, ViewGroup arg2) {
        // TODO Auto-generated method stub
        final Photo row = this.items.get(arg0);
        View itemView = null;

        if (arg1 == null) {
            LayoutInflater inflater = (LayoutInflater) arg2.getContext() 
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            itemView = inflater.inflate(R.layout.photo_item, null);
        } else {
            itemView = arg1;
        }

        imageView = itemView.findViewById(R.id.imageView1);

        TextView tipo = itemView.findViewById(R.id.tipo);
        tipo.setText(row.getTipo());

        TextView descricao = itemView.findViewById(R.id.descricao);
        descricao.setText(row.getDescricao());

        Button photoButton = itemView.findViewById(R.id.photoButton);
        photoButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                ((Activity)context).startActivityForResult(intent, CAMERA_REQUEST);
            }
        });

        return itemView;
    }
}

ПодробностиДеятельность:

public class DetailsActivity extends AppCompatActivity {

    private ListView listViewPhotos;
    public static PhotoAdapter PhotoAdapter;
    ArrayList<Photo> photo;
    private LVPhotoAdapter lvPhotoAdapter;
    private static final int CAMERA_REQUEST = 1888;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_details);

        (...)

        listViewPhotos = findViewById(R.id.listViewPhotos);
        PhotoAdapter = new PhotoAdapter(getApplicationContext());
        photo = PhotoAdapter.getPhoto(bostamp);
        lvPhotoAdapter = new LVPhotoAdapter(DetailsActivity.this, photo);
        listViewPhotos.setAdapter(lvPhotoAdapter);
        registerForContextMenu(listViewPhotos);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == CAMERA_REQUEST) {
            Bitmap image = (Bitmap) data.getExtras().get("data");
            View itemView = null;
            ImageView imageview = itemView.findViewById(R.id.imageView1);
            imageview.setImageBitmap(image);
        }
    }
}
...