Turkcell | Geleceği Yazanlar

Soru & Cevap

Webservice ve Listview kullanımı

03.10.2013 - 23:27

Selam,

Uygulamamın A activity sinde bir webservice den gelen json veri bloğunu listview e basabiliyorum. Lakin ihtiyacım şu ki A activitysinde bulunan  bir butona tıkladığımda tam sayfa bir listview açılmalı ve bu web serviceden gelen veriler ile dolmalı. daha sonra bu listview den seçtiğim herhangi bir item i yine A activitiy sin de bir edittext e yazdırmalıyım. Bu arada B activity kapanmalı

Bunu da şöyle düşündüm A activitiy sindeki bir butona bastığımda B activity açıyorum listview e orada doldurmaya çalışıyorum lakin tıkladığım item ın değerini A activity ine alamıyorum. Ayrıca listview e auto-complete yeteneği de katmak istiyorum.

Bu konuda yardımcı olur musunuz?

5172 Görüntülenme

15 Cevap

Caner Güral
04.10.2013 - 18:36

DialogFragment'taki ListView'a bir ItemClickListener ekleyip (doğrudan setOnItemClickListener() üzerinden), tıklanma olayında Activity'deki bir fonksiyon tetiklenebilir. 

falancaListView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int pos,
                    long id) {
                MainActivity mActivity=(MainActivity) getActivity();
                mActivity.secimSonucuAl(falancaArray.get(pos));                
                getDialog().dismiss();
                
            }
        });

gibi. 

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

İsmail
04.10.2013 - 16:07

Ek tavsiyeni de dikkate alıyorum :)

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

İsmail
04.10.2013 - 16:07

Caner şuan sorun yok çok saol. Listview çekebiliyorum. 

Son bir şey daha kaldı bu listview da bir seçeneği tıkladığımda bu ekranı kapatıp seçtiğim değeri A activity üzerinde bit textview e yazdırabilmem için yönlendirebilir misin beni?

 

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

Caner Güral
04.10.2013 - 15:49

O satrın null döndürmesinin sebebi lstVessel'in null olması bence. Çünkü findViewById() ile cast işlemi yaparken bir view'da (rootview'da) arama yapmıyorsunuz. Bunun yerine getDialog() ile diyalog nesnesine ulaşıyorsunuz ve o nesnede R.id.CityList integer'ını içeren bir şey yok. getDialog().findViewById() yerine rootview.findViewByID() derseniz düzelecektir.

Ek:

Ben olsam Adapter'ı onCreateView() yerine onCreate() olayında oluştururdum. Bu durumda, sizin örnekte Adapter'a kaynaklık eden CityS array'ını da onun ulaşabileceği bir yerde set ederdim. onCreate()'te üretilen/bağlanan nesnelerin ömrü daha uzun olacaktır. (Çok sık gerçekleşen bir olay değil ama olsun)

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

İsmail
04.10.2013 - 14:48

Teşekkürler Onur veri taşıma için bunu kullanacağım.

Caner,

getActivity i verdim Bu sefer de null pointer Exception vermeye başladı.

lstVessel.setAdapter(adapter); satırını comment e alırsam normal bir şekilde DF denemelerim yazan bir popup menü açılıyor. Bir türlü şu listview i bu popup a basamadım.

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

Onur KONCAOĞLU
04.10.2013 - 14:25

startActivityForResult diyerek de açabilirsin B activitysini. Örnek:

A activity:

{

Intent intent = new Intent(this, B.class);

startActivityForResult(intent, RESULT_OK);

}

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        switch(resultCode) {

            case RESULT_OK:
                String deneme = data.getStringExtra("deneme");
                break;

        }

    }

 

B activity:

Intent intent = new Intent();
intent.putExtra("deneme", "selam");
setResult(RESULT_OK, intent);
finish();

 

burada RESULT_OK static final bir int değer, iki activity arasında ortaklığı sağlamak için

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

Caner Güral
04.10.2013 - 13:43

Onu derken, DialogFragment'ı kast ettim.

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

Caner Güral
04.10.2013 - 13:41

Adapter'ın context'ine getActivity() verebilirsiniz. Onu oluşturan ve FragmentManager ile bağlantıyı kuran Activity context'ine bağlanacaktır.

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

İsmail
04.10.2013 - 12:16

Caner,

Anladım cevaplarına teşekkür ediyorum. 

Normalde Listview ım MainActivity içerisinde iken array e context olarak MainActivity.this vermek yeterli oluyordu. Lakin ekte de gönderdiğim gibi array adapterin context parametresinde hata alıyorum. Buraya ne vermem gerekiyor.

Not: DFragment sınıfım DialogFragment tan türüyor, Diğer örneklerde MainActivity direk Activity sınıfından türüyordu. Tek fark bu diye görüyorum lakin anlamadım..

 

 

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

Caner Güral
04.10.2013 - 11:54

Veriler sık sık internetten alıp işleyip listview'a inflate etmeye müsait değilse, bir kere alıp Application nesnesine bağlayıp orada tutma yoluna gitmeyin, bunun yerine SQLite ile veri tabanında saklamayı tercih edebilirsiniz diyecektim, application context önerisi gelince. Kolaylıklar dilerim.

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

İsmail
04.10.2013 - 08:07

Caner,

İlla activity B ye ihtiyacım yok. DialogFragment i bir araştırayım. Bu konuyla ilgili başka söyleyebileceğin bir şey var mıdır bana?

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

Caner Güral
04.10.2013 - 03:55

Ekranın üstüne bir ListView şeklinde kayan/fluid bir ListActivty ya da ListView içeren sıradan Activity (B) getireceğinize bi tür DialogFragment kullanın veya yazın daha güzel olur. İlla Activity B'de seçtiğinizin bilgisini Activity A'ya geçirecekseniz setResult(), startActivityForResult(), onActivityResult() gibi fonksiyonlara bakın derim. Seçili öğeyi de getSelectedItemId() veya getSelectedItemPosition() ile array adapter'dan alabilrisiniz.

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

İsmail
04.10.2013 - 00:18

Kemal Selim,

putextra ile veriyi B activity e gönderdim diyelim. B de bulunan listview de seçtiğim item ı nasıl geriye gönderebilirim A activity ye?

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

Kemal Selim Tekinarslan
03.10.2013 - 23:38

Selam, Activity çağırıken intent kullanıyorsun ya orada intente putextra ile veri ekleyebilirsin ancak data büyüdükçe sorun açar. Eğer büyük veri geçişlerine ihtiyacın var ise singleton bir uygulama context class yapıp objesinde datalarını tutabilirsin. 

 

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

İsmail
03.10.2013 - 23:28

Sanırım . ile başlayan konu başlıklarında sorun var :) Bir önceki açtığım 2 konuda da forbidden hatası alıyorum sanırım herkes aynı durumda :) Diğer konuları silebilirseniz sevinirim.

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.