Soru & Cevap

Webservice ve Listview kullanımı ...

03.10.2013 - 11: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?

17 Görüntülenme

15 Cevap

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

picture-3606-1408610132.jpg
cgural
04.10.2013 - 06: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. 

Profile picture for user ismailkaracaoglu
ismailkaracaoglu
04.10.2013 - 04:07

Ek tavsiyeni de dikkate alıyorum :)

Profile picture for user ismailkaracaoglu
ismailkaracaoglu
04.10.2013 - 04: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?

 

/sites/default/files/cevaplar/dosya/2020/file-emulator.png
picture-3606-1408610132.jpg
cgural
04.10.2013 - 03: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)

Profile picture for user ismailkaracaoglu
ismailkaracaoglu
04.10.2013 - 02: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.

/sites/default/files/cevaplar/dosya/2020/file-getactivity.png
picture-830-1447858140.jpg
onur
04.10.2013 - 02: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

picture-3606-1408610132.jpg
cgural
04.10.2013 - 01:43

Onu derken, DialogFragment'ı kast ettim.

picture-3606-1408610132.jpg
cgural
04.10.2013 - 01:41

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

Profile picture for user ismailkaracaoglu
ismailkaracaoglu
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..

 

 

/sites/default/files/cevaplar/dosya/2020/file-fragmentlistview.png
picture-3606-1408610132.jpg
cgural
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.

Profile picture for user ismailkaracaoglu
ismailkaracaoglu
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?

picture-3606-1408610132.jpg
cgural
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.

Profile picture for user ismailkaracaoglu
ismailkaracaoglu
04.10.2013 - 12: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?

picture-4816-1393230227.jpg
selim.tekinarslan
03.10.2013 - 11: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. 

 

Profile picture for user ismailkaracaoglu
ismailkaracaoglu
03.10.2013 - 11: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.