Java 如何将图像位置发送到片段中的另一个活动?
我试图用gridview创建一个图像列表,当用户选择其中一个图像时,它将全屏显示所选图像。我想问的是如何知道所选图像的位置,并将图像的位置通知给目标,以便它可以全屏显示Java 如何将图像位置发送到片段中的另一个活动?,java,android,android-intent,gridview,Java,Android,Android Intent,Gridview,我试图用gridview创建一个图像列表,当用户选择其中一个图像时,它将全屏显示所选图像。我想问的是如何知道所选图像的位置,并将图像的位置通知给目标,以便它可以全屏显示 package com.example.bpskotayogyakarta.ui.infografis; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.La
package com.example.bpskotayogyakarta.ui.infografis;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProviders;
import com.example.bpskotayogyakarta.R;
import com.google.gson.annotations.SerializedName;
import com.squareup.picasso.Picasso;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.http.GET;
public class InfografisFragment extends Fragment {
private InfografisViewModel infografisViewModel;
private List<Spacecraft> spacecraftList;
private GridViewAdapter adapter;
private GridView gridView;
ProgressBar myProgressBar;
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
infografisViewModel = ViewModelProviders.of(this).get(InfografisViewModel.class);
View root = inflater.inflate(R.layout.fragment_infografis, container, false);
final ProgressBar myProgressBar= root.findViewById(R.id.progressBar2);
myProgressBar.setVisibility(View.VISIBLE);
MyAPIService myAPIService = RetrofitClientInstance.getRetrofitInstance().create(MyAPIService.class);
gridView = root.findViewById(R.id.grid_view);
Call<List<Spacecraft>> call = myAPIService.getSpacecrafts();
call.enqueue(new Callback<List<Spacecraft>>() {
@Override
public void onResponse(Call<List<Spacecraft>> call, Response<List<Spacecraft>> response) {
myProgressBar.setVisibility(View.GONE);
spacecraftList = response.body();
adapter = new GridViewAdapter(getContext(), spacecraftList);
gridView.setAdapter(adapter);
}
@Override
public void onFailure(Call<List<Spacecraft>> call, Throwable throwable) {
myProgressBar.setVisibility(View.GONE);
Toast.makeText(getContext(), throwable.getMessage(), Toast.LENGTH_LONG).show();
}
});
return root;
}
class Spacecraft {
/*
INSTANCE FIELDS
*/
@SerializedName("id_info")
private int id_info;
@SerializedName("gambar_info")
private String gambar_info;
public Spacecraft(int id_info, String gambar_info) {
this.id_info = id_info;
this.gambar_info = gambar_info;
}
/*
*GETTERS AND SETTERS
*/
public int getId() {
return id_info;
}
public void setId(int id_info) {
this.id_info = id_info;
}
public String getImageURL() {
return gambar_info;
}
}
interface MyAPIService {
@GET("connection_image_bps.php")
Call<List<Spacecraft>> getSpacecrafts();
}
static class RetrofitClientInstance {
private static Retrofit retrofit;
private static final String BASE_URL = "https://bpskotayogyakarta.000webhostapp.com/";
public static Retrofit getRetrofitInstance() {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
class GridViewAdapter extends BaseAdapter {
private List<Spacecraft> spacecrafts;
private Context context;
public GridViewAdapter(Context context,List<Spacecraft> spacecrafts){
this.context = context;
this.spacecrafts = spacecrafts;
}
@Override
public int getCount() {
return spacecrafts.size();
}
@Override
public Object getItem(int position) {
return spacecrafts.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
if(view==null)
{
view=LayoutInflater.from(context).inflate(R.layout.list_gambar_info,viewGroup,false);
}
ImageView spacecraftImageView = view.findViewById(R.id.image_view);
spacecraftImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
final Spacecraft thisSpacecraft= spacecrafts.get(position);
if(thisSpacecraft.getImageURL() != null && thisSpacecraft.getImageURL().length()>0)
{
Picasso.get().load(thisSpacecraft.getImageURL()).placeholder(R.drawable.placeholder).into(spacecraftImageView);
}else {
Toast.makeText(context, "Empty Image URL", Toast.LENGTH_LONG).show();
Picasso.get().load(R.drawable.placeholder).into(spacecraftImageView);
}
view.setOnClickListener(new View.OnClickListener() {
private int id_temp = thisSpacecraft.getId();
@Override
public void onClick(View view) {
Intent intent = new Intent(context, FullscreenInfo.class);
intent.putExtra("image", String.valueOf(thisSpacecraft)); // put image data in Intent
context.startActivity(intent);
}
});
return view;
}
}
}
那么我的代码有什么问题吗?您可以使用onItemClickListener来实现这一点
// Implement On Item click listener
gridView1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Spacecraft spaceCraft = (Spacecraft)parent.getAdapter().getItem(position);
Intent intent = new Intent(getActivity,FullscreenInfo.class);
intent.putExtra("image_url",spaceCraft.getImageURL());
startActivity(intent);
}
});
}您可以将所选图像(单击的图像)的路径发送给“活动”,而不是发送图像的位置。@AtishAgrawal-Hmm您能具体解释一下您的答案吗?请尝试Sandeep的答案一次。他的方法是正确的。你好,你能帮我吗-->
// Implement On Item click listener
gridView1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Spacecraft spaceCraft = (Spacecraft)parent.getAdapter().getItem(position);
Intent intent = new Intent(getActivity,FullscreenInfo.class);
intent.putExtra("image_url",spaceCraft.getImageURL());
startActivity(intent);
}
});
public class FullscreenInfo extends AppCompatActivity {
ImageView selectedImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fullscreen_info);
selectedImage = (ImageView) findViewById(R.id.fullscreen_view_image); // init a ImageView
String imageUrl = getIntent().getStringExtra("image_url");
//you can use this image url to load image in your imageview by Using any library like picasso or Glide
}