J'ai créé une méthode où je peux charger une image à partir du dossier Drawable qui fonctionne bien, mais lorsque j'essayais de charger l'image à partir de URL et de la définir sur Imageview de ma mise en page personnalisée, elle ne renvoie que:
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical"> <ImageView android:id="@+id/FF_ReceiptImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="20dp" android:src="@drawable/mobile_sales_img" android:layout_gravity="center" android:background="@drawable/border"/> </LinearLayout>
Mon code Java est:
public void CustomDialogLoadImage() { Dialog dialog = new Dialog(this); ImageView FF_ReceiptImage = (ImageView) dialog.findViewById(R.id.FF_ReceiptImage); Picasso.with(ConveyanceAmtUpdateApprove.this).load("http://i.imgur.com/DvpvklR.png").into(FF_ReceiptImage); dialog.setContentView(R.layout.custom_dialogbox_image); dialog.show(); }
Ma boîte de dialogue personnalisée est:
java.lang.IllegalArgumentException: Target must not be null.
J'ai essayé peut-être un moyen de résoudre ce problème, mais il est résolu, veuillez m'aider ...
3 Réponses :
Après l'avoir vérifié une fois de plus, je vois des choses étranges dans la 4ème ligne.
Essayez ceci
ImageDialog dialog = ImageDialog.getInstance(item.getImageUrl(), item.getName(), 1); dialog.show(fragmentManager, null);
Ou vous devez le faire à l'intérieur de View qui est-il déjà gonflé en premier, ceci est un exemple de code
public class ImageDialog extends DialogFragment { public static final String ARG_IMAGE_URI = "arg_image_uri"; public static final String ARG_IMAGE_NAME = "arg_image_name"; public static final String ARG_IMAGE_ID_CHANNEL = "arg_image_id_channel"; public ImageDialog(){ // if no argument you can use empty constructor } public static ImageDialog getInstance(String uriStr, String imageName, int idChannel){ ImageDialog imageDialog = new ImageDialog(); Bundle bundle = new Bundle(); bundle.putString(ARG_IMAGE_URI, uriStr); bundle.putString(ARG_IMAGE_NAME, imageName); bundle.putInt(ARG_IMAGE_ID_CHANNEL, idChannel); imageDialog.setArguments(bundle); return imageDialog; } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // inflate first with your own layout dialog return inflater.inflate(R.layout.popup_image_dialog, container, false); } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // Look this part ImageView imageView = view.findViewById(R.id.popup_image); //------------- Bundle bundle = getArguments(); if(bundle != null){ String name = bundle.getString(ARG_IMAGE_NAME); getDialog().setTitle(name); String imageUri = bundle.getString(ARG_IMAGE_URI); int idChannel = bundle.getInt(ARG_IMAGE_ID_CHANNEL); if(idChannel == 0){ Picasso.with(getContext()) .load(new File(imageUri)) .into(imageView); }else { Picasso.with(getContext()) .load(imageUri) .into(imageView); } } } }
Et pour appeler cette boîte de dialogue, effectuez cette action
public void CustomDialogLoadImage() { Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.custom_dialogbox_image); ImageView FF_ReceiptImage = (ImageView) dialog.findViewById(R.id.FF_ReceiptImage); Picasso.with(ConveyanceAmtUpdateApprove.this).load("http://i.imgur.com/DvpvklR.png").into(FF_ReceiptImage); dialog.show(); }
Merci @Nanda Z ... Je suis vraiment approprié que vous ayez résolu la session très rapide
Je suis heureux d'entendre ça. C'est l'endroit qui rend le monde du codage pas si effrayant ... je partage ce que j'ai. Btw, vous pouvez voter pour ma réponse afin qu'elle soit utile aux autres développeurs.
public void CustomDialogLoadImage() { Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.custom_dialogbox_image); ImageView FF_ReceiptImage = (ImageView) dialog.findViewById(R.id.FF_ReceiptImage); dialog.show(); Picasso.with(ConveyanceAmtUpdateApprove.this).load("http://i.imgur.com/DvpvklR.png").into(FF_ReceiptImage); } will work fine
Le problème est que vous essayez d'obtenir une vue qui est nulle
Dialog dialog = new Dialog(this); View dialogView = LayoutInflater.from(this).inflate(R.layout.custom_dialogbox_image,null,false); ImageView dialogImage= dialogView.findViewById(R.id.FF_ReceiptImage); Picasso.with(ConveyanceAmtUpdateApprove.this) .load("http://i.imgur.com/DvpvklR.png") .into(dialogViewImage); dialog.setContentView(dialogView); dialog.show();
essayez de déplacer votre code après dialog.show ()