Нажатие на изображение должно открыть изображение в новом действии - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть ListView с изображениями.Я взял эти изображения по URL, используя Retrofit.Сейчас я пытаюсь установить OnClick, чтобы мой адаптер передавал каждую фотографию новому занятию, но у меня возникли некоторые проблемы с намерением, и я не знаю, какое намерение я должен использовать.

Когда я запускаю приложение, оно показывает мне пустую страницу, и отладчик говорит, что мое намерение и мой ImageView равны NULL.В новом упражнении я использую только один ImageView.

Это мой адаптер:

public class CustomListPhotoView extends ArrayAdapter<String>{

    private List<String> img;
    private Activity context;

    public CustomListPhotoView(Activity context,  List<String> img) {

        super(context, R.layout.photo_listview,img);
        this.context = context;
        this.img = img;
    }


    @NonNull
    @Override
    public View getView(final int position, @NonNull View convertView, @NonNull ViewGroup parent)
    {
        View r = convertView;
        ViewHolder viewHolderPhoto = null;
        if(r == null) {

            LayoutInflater layoutInflater = context.getLayoutInflater();
            r = layoutInflater.inflate(R.layout.photo_listview, null, true);
            viewHolderPhoto = new ViewHolder(r);
            r.setTag(viewHolderPhoto);
        } else {

            viewHolderPhoto = (ViewHolder) r.getTag();
        }

        Picasso.with(context).load(img.get(position))
                .resize(150,200)
                .centerCrop()
                .into(viewHolderPhoto.imageView);

       viewHolderPhoto.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, DisplayPhoto.class);
                intent.putExtra("image_url", img.get(position));
                context.startActivity(intent);

            }
        });
        return r;
    }
    class ViewHolder {

        ImageView imageView;
        ViewHolder(View v) {
            imageView =  v.findViewById(R.id.imageView);
        }
    }
}

Это мой класс по модернизации:

public class SightsPhotosActivity extends AppCompatActivity {

    private ListView listView;
    private List<String> photos = new ArrayList<>();
    private Intent intent;
    private String sight;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_photos);
        intent = getIntent();
        sight = intent.getStringExtra("sightName");
        listView = findViewById(R.id.sights_photos);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            }
        });

        Retrofit retrofit = RequestService.initializeRequest().build();
        SightClient client = retrofit.create(SightClient.class);
        Call<List<Photo>> call = client.repoForPhotos(sight);
        call.enqueue(new Callback<List<Photo>>() {
            @Override
            public void onResponse(Call<List<Photo>> call, Response<List<Photo>> response) {

                CustomListPhotoView customListPhotoView ;
                List<Photo> repos = response.body();
                for(Photo photo: repos) {
                    photos.add(photo.getImage());
                }
                customListPhotoView = new CustomListPhotoView(SightsPhotosActivity.this,photos);
                listView.setAdapter(customListPhotoView);
            }

            @Override
            public void onFailure(Call<List<Photo>> call, Throwable t) {
                Toast.makeText(SightsPhotosActivity.this,"Something sent wrong ,please re-try later...",Toast.LENGTH_SHORT).show();
            }
        });
    }
}

И этомоя новая деятельность

public class DisplayPhoto extends AppCompatActivity {
    ImageView Display;
    private Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_photo);
        intent = getIntent();
        String Url = intent.getStringExtra("image_url");
        Display = findViewById(R.id.DisplayimageView);

        Picasso.with(this).load(Url).centerCrop().into(Display);
    }
}

Я действительно запутался.Любое предложение было бы замечательно.

1 Ответ

0 голосов
/ 16 декабря 2018

Возможно, попробуйте получить эту строку следующим способом:

String imgURL;
if (savedInstanceState == null) {
    Bundle extras = getIntent().getExtras();
    if(extras == null) {
        imgURL = null;
    } else {
        imgURL = extras.getString("image_url");
    }
} else {
    imgURL = (String) savedInstanceState.getSerializable("image_url");
}
...