У меня есть 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);
}
}
Я действительно запутался.Любое предложение было бы замечательно.