Turkcell | Geleceği Yazanlar

Soru & Cevap

ImageView Resim Değiştirme

16.12.2013 - 18:19

Merhaba, uygulamamda son anda farkettiğim bir şey oldu. Listview'den bundle ile "bundle.putString("resimveri",getString(R.drawable.res24));" şu şekilde drawable nesnesini class'a gönderiyorum. Alıcı kodu bulamıyorum. Şu şekilde yapınca hata veriyor; "

ImageView resim = (ImageView) findViewById(R.id.imageView1);

String resimveri = getIntent().getStringExtra("resimveri");

resim.setImageResource(resimveri);

Buradaki ImageView'e resmi başka bir class'dan nasıl atayabilirim?

7856 Görüntülenme

8 Cevap

Furkan KURT
22.12.2013 - 02:24

Çok çok çok teşekkürler Yasi Abi, sonunda başardım :)

Aciliş ekranına putextras koydum ve bütün sorun düzeldi :)

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Yasin Kafadar
21.12.2013 - 20:33

Senin ekran alışlarında sıkıntı var. Açılış ekranından sonra EkranBir'i açıyorsun. EkranBir'i açarken herhangi bir putExtra yapıyor musun? Yapmadığın içinde henüz resimveri diye bir veri göndermediğin için default value olarak dönmesini istediğin 0 değeri dönüyor. 0 değerinde de herhangi bir drawable id'si olmadığı için uygulama exception alıp kapanıyor. Burada ya 0 kontrolü yapıp default bir image koy ya da uygulamanın akışını değiştir. Nasıl debug edeceğin konusunda internette şöyle bir video buldum. Daha buna benzer başka videolarda vardır. Bu işi videodan öğrenmek daha kolay olur. Debug ederken nerelerde hata yaptığını daha çabuk bulabilirsin. http://www.youtube.com/watch?v=JqHYbm9e05A Soru sormaktan da çekinme ama biraz daha net sorular bekliyoruz :)  Kolay gelsin.

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Furkan KURT
21.12.2013 - 19:27

Peki, zamanınızı aldığım için çok üzgünüm. Zaman ayırdığınız için de çok teşekkür ediyorum. Verdiğiniz bilgiler gerçekten çok değerli. 

 

Sonlarda "putExtra görüyor musun ben göremiyorum?" yazmışsınız ama, putExtra veri gönderilirken kullanılmıyor mu? Zaten ben maddelerin en sonunda "startIntent" komutundan önce "intent.putExtras(bundle);" komutunu kullanmıştım, ne demek istediğinizi pek anlamadım. 

Verdiğiniz bütün bilgileri eksiksiz uyguladım. Bazı yerleri değiştirmeyi unutmuşum, hatırlatmanız çok iyi oldu :)

Bu arada debug edilmenin nasıl olduğunu da tam bilmiyorum.

Uygulamada şöyle bir şey de var, açılan ekrandan başka bir ekrana geçtiğimde, önceki ekranın kapatılmasını sağlasam olur mu? Yani bir çok ekran açılınca uygulama 14MB falan ram yiyor. Bunu nasıl engellerim?

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Yasin Kafadar
21.12.2013 - 14:33

Selam Furkan,

Projeni incelediğim zaman hangi ekrandan hangi ekrana doğru bir akış olduğunu yazsaydın daha hızlı bir cevap verebilirdik. 

Uygulamanın Launcher activity'si yani ilk ikona basılıp açılan ekranının adı Main.java daha sonra oradan 4 saniye geçtikten sonra Acilis.java diye bir Activity açıyorsun. Acilis activity içinde 2 tane buton bulunuyor. o butonlardan Go to diet list butonuna basınca EkranBir Activity'ni açıyorsun. Onuda aşağıdaki gibi açmışsın. Sana daha önce söylediğim gibi activity açılışlarını böyle yapma.

startActivity(new Intent("com.monsterdroid.howtoloseweight.EKRANBIR"));

EkranBir'i açınca aşağıdaki gibi bir kod ile bir tane drawable almaya çalışıyorsun. Sen bu akışda herhangi bir putExtra görüyor musun ben göremiyorum?

int resimveri = getIntent().getIntExtra("resimveri", 0);
resim.setImageDrawable(getResources().getDrawable(resimveri));

Kendi kurduğun akışı biraz daha dikkatli olarak incelersen zaten sende sorunun göreceksin. Ayrıca uygulamanın nasıl debug edildiğini biliyor musun?

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Furkan KURT
17.12.2013 - 16:31

Eee, Yasin Abi, kodu denedim yalnız okuma kısmında;

"int resimveriId = getIntent().getIntExtra("resimveri");"

Şu hatayı veriyor, "The method getIntExtra(String, int) in the type Intent is not applicable for the arguments (String)"

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Yasin Kafadar
17.12.2013 - 09:43

Selam Furkan,

bundle.putString("resimveri",getString(R.drawable.res24));

Yukarıdaki ifade zaten yanlış bir ifade. getString metodunu çağırıp içine strings.xml içinden bir resource id'si vermeyip de drawable'id si verdiğin zaman garip bir kullanım oluyor. Yani sen bir resmi, string gibi almaya çalışıyorsun.

Belki şöyle bir şey işini çözebilir.

Kullanmak istediğin drawable nesnesini (bunu şu anda bir resim dosyası olarak varsayıyorum) id'si int tipinde bir değer olduğu için aşağıdaki gibi bundle içine koyuyorum. 

bundle.putInt("resimveri", R.drawable.res24);

Okumak istediğim yerde de aşağıdaki gibi int tipinden okuyup ImageView'a set ediyorum bu resmi

ImageView resim = (ImageView) findViewById(R.id.imageView1);

int resimveriId = getIntent().getIntExtra("resimveri");

resim.setImageDrawable(getResources().getDrawable(resimveriId));

 

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Furkan KURT
16.12.2013 - 19:06

Malesef olmadı, hata şu "res cannot be resolved". Sanırı res'den sonra numara girme yapmışsınız. Bize bundle şu şekilde göndermiyor mu "@drawable/res24"?

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Murat
16.12.2013 - 18:45

Merhaba şunu dener misin?

 

resim.setImageDrawable(res.getDrawable(resimveri));

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.