Yanıtlar:
Paketler genellikle çeşitli Android etkinlikleri arasında veri aktarmak için kullanılır. Hangi tür değerleri iletmek istediğinize bağlıdır, ancak paketler her tür değeri tutabilir ve bunları yeni etkinliğe aktarabilir.
Bu şekilde kullanabilirsiniz:
Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);
startActivity(intent);
Geçirilen değerleri aşağıdakileri yaparak alabilirsiniz:
Bundle extras = intent.getExtras();
String tmp = extras.getString("myKey");
Daha fazla bilgiyi şu adreste bulabilirsiniz:
Bundle
Ve Intent
nesnelerini kullanarak etkinlikler arasında veri aktarımı yapın .
İlk Bundle
nesne yaratın
Bundle b = new Bundle();
Ardından, depolanan dize verilerini anystring
paket anahtarıyla ilişkilendirin"myname"
b.putString("myname", anystring);
Şimdi bir Intent
nesne oluşturun
Intent in = new Intent(getApplicationContext(), secondActivity.class);
Paket nesnesini b
hedefe iletme
in.putExtras(b);
ve ikinci aktiviteyi başlat
startActivity(in);
İkinci aktivitede, ilk aktiviteden geçen verilere erişmemiz gerekiyor
Intent in = getIntent();
Şimdi, verileri paketten almanız gerekiyor
Bundle b = in.getExtras();
Son olarak, şu anahtarla ilişkili dize verilerinin değerini alın "myname"
String s = b.getString("myname");
İleride veriyi kendilerine aktarmak için paketlerin etkinlikler tarafından kullanıldığını da eklemeliyim.
Ekran döndüğünde veya başka bir etkinlik başlatıldığında, yöntem protected void onSaveInstanceState(Bundle outState)
çağrılır ve etkinlik yok edilir. Daha sonra, etkinliğin başka bir örneği oluşturulur ve public void onCreate(Bundle savedInstanceState)
çağrılır. İlk etkinlik örneği oluşturulduğunda, paket null olur; ve paket boş değilse, etkinlik selefi tarafından başlatılan bazı işleri sürdürür.
Android metni otomatik olarak metin alanlarına kaydeder, ancak her şeyi kaydetmez ve bazen küçük hatalar ortaya çıkar.
Bununla birlikte, en yaygın anti-kalıp, onCreate()
sadece başlatma olduğunu varsayar . Bu yanlıştır, çünkü aynı zamanda devleti geri yüklemelidir.
Bu "döndürme sırasında etkinliği yeniden oluşturma" davranışını devre dışı bırakma seçeneği vardır, ancak yeniden başlatma ile ilgili hataları önlemez, bunlardan bahsetmek daha zorlaşır.
Etkinlik yok edilecekken çağrılması garanti edilen tek yöntemin de olduğuna dikkat edin onPause()
. (Dokümanlardaki aktivite yaşam döngüsü grafiğine bakın.)
A Bundle
, anahtarları değerlerle Map
eşleyen bir Java nesnesine çok benzer String
. Etkinlikler ve diğer uygulama bileşenleri arasında bilgi aktarmak için kullanılır. Çerçeve tarafından durum bilgilerini yakalamak ve geri yüklemek için de kullanılır.
Android'in bunun için sade eski Map
nesneleri kullanmamasının nedeni Map
çok esnek olmasıdır; serileştirilemeyen nesneler (örneğin, G / Ç akışları) içerebilir. Bundle
API Paketin içeriği seri olduğu garanti edilir bir şekilde bir gruba eklenir edilebilir nesne türlerini kısıtlar. Android çerçevesi bu özelliğe dayanıyor.
Uygulama Esasları ile ilgili dokümanları okumanızı tavsiye ederim . Bu, diğer şeylerin yanı sıra, paketlerin ve amaçların ne olduğunu ve ne için kullanıldığını açıklar.
Paketler, Amaçlar yoluyla bir etkinlikten diğerine rastgele veri göndermek için kullanılabilir. Bir Niyet yayınladığınızda, ilgili Etkinlikler (ve diğer BroadcastRecievers) bu konuda bilgilendirilir. Bir niyet, Paket ile birlikte ekstra veri gönderebilmeniz için bir Paket içerebilir.
Paketler anahtar / değer eşlemeleridir, bu nedenle bir şekilde Hash gibidirler, ancak kesinlikle tek bir String / Foo nesne eşlemesi ile sınırlı değildirler. Yalnızca belirli veri türlerinin "Parçalanabilir" olarak değerlendirildiğini ve Paket API'sında açıkça belirtildiğini unutmayın.
Sadece bir paket oluşturun,
Bundle simple_bundle=new Bundle();
simple_bundle.putString("item1","value1");
Intent i=new Intent(getApplicationContext(),this_is_the_next_class.class);
i.putExtras(simple_bundle);
startActivity(i);
"This_is_the_next_class.class"
Bunun gibi öğeleri alabilirsiniz.
Intent receive_i=getIntent();
Bundle my_bundle_received=receive_i.getExtras();
my_bundle_received.get("item1");
Log.d("Value","--"+my_bundle_received.get("item1").toString);
Paket: - Dize değerlerinden çeşitli Parcelable türlerine eşleme.
Paket genellikle android'in çeşitli etkinlikleri arasında veri iletmek için kullanılır.
onPause () sonra onStop () ve sonra onStop () öğesini onPause () 'a ters sırada çağırdığımızda.
Sistemin önceki durumu geri yüklemek için kullandığı kaydedilmiş verilere "örnek durumu" adı verilir ve bir Bundle nesnesinde depolanan anahtar / değer çiftlerinin bir koleksiyonudur.
Paket, etkinlikler arasında veri paylaşmak ve oncreate () yönteminde uygulamanın durumunu kaydetmek için kullanılır, böylece uygulama nerede durdurulduğunu öğrenir ... Umarım yardımcı olur :)
niyet nesnesi yardımıyla bir etkinlikten başka bir etkinliğe veri gönderme paketinin kullanılması; Herhangi bir tür olabilen verileri bir arada tutun.
Şimdi, iki aktivite arasında paket veri aktarımının nasıl oluşturulacağını anlatacağım.
Adım 1: İlk aktivite hakkında
Bundle b=new Bundle();
b.putString("mkv",anystring);
Intent in=new Intent(getApplicationContext(),secondActivity.class);
in.putExtras(b);
startActivity(in);
Adım 2: İkinci Aktivitede
Intent in=getIntent();
Bundle b=in.getExtras();
String s=b.getString("mkv");
Bunun sizin için yararlı olduğunu düşünüyorum ...........
Paket, yalnızca iki farklı bileşen arasında veri aktarmak değil, daha da önemlisi, etkinlik yeni etkinliğe zarar vermeden önce depolanan değerleri geri yüklemek için kullanılır.
EditText
pencere öğesindeki metin veya a'nın kaydırma konumu gibi ListView
.
İlk aktivite:
String food = (String)((Spinner)findViewById(R.id.food)).getSelectedItem();
RadioButton rb = (RadioButton) findViewById(R.id.rb);
Intent i = new Intent(this,secondActivity.class);
i.putExtra("food",food);
i.putExtra("rb",rb.isChecked());
İkinci aktivite:
String food = getIntent().getExtras().getString("food");
Boolean rb = getIntent().getExtras().getBoolean("rb");