android eğitimi etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
android eğitimi etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

15 Haziran 2011 Çarşamba

Android Serisi 6. Bölüm - Intentler

Merhaba,

Şu ana kadar yaptığımız örneklerin hiçbirinde sayfalar arası geçiş yapmadık. Android'de bunu yapmamıza imkan veren nesne Intent nesnesidir. Bu ilk örneğimizde intentlere basitçe bir giriş yapacağız, konu ilerledikçe muhteviyatta artmış olacak.

Senaryomuzda 2 adet düğme var, birinci düğmeye tıklandığında Türkiye 1. Ligi, diğer düğmeye tıklandığındaysa İngiltere Premier Lig'e ait sayfaya gidilecek.

Her zaman olduğu gibi yeni bir proje yaratarak işe başlıyoruz. Main.xml dosyasına sadece bu iki düğmeyi ekliyoruz.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Türkiye Ligi Fikstürü"
android:id="@+id/btnTurkiyeLigi"
/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="İngiltere Premier Ligi Fikstürü"
android:id="@+id/btnPremierLig"
/>
</LinearLayout>
Daha sonra 2 tane activity oluşturuyorum, birinin adı TurkiyeLigi diğerinin adı ise Premier Lig (aşağıdaki gibi)

TurkiyeLigi Activity
package app.intentornek;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class TurkiyeLigi extends Activity {

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

TextView txtYazi = new TextView(this);
txtYazi.setText("türkiye spor toto 1. ligi sayfası");
setContentView(txtYazi);
}
}

PremierLig Activity
package app.intentornek;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class PremierLig extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

TextView txtYazi = new TextView(this);
txtYazi.setText("ingiltere premier ligi sayfası");
setContentView(txtYazi);
}
}
Oluşturulan bu Activityleri AndroidManifest dosyama ekliyorum.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="app.intentornek"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".IntentsOrnekActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".TurkiyeLigi"></activity>
<activity android:name=".PremierLig"></activity>
</application>
</manifest>

Son olarak projemin main activity'si olan IntentsOrnekActivity'i aşağıdaki gibi kodluyorum.

package app.intentornek;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class IntentsOrnekActivity extends Activity
implements OnClickListener{
/** OnClickListener nesnesi sürekli kullanılacağı için implemente edildi. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(app.intentornek.R.layout.main);

//butonlar bulunuyor
Button btnTurkiyeLigi = (Button)findViewById(app.intentornek.R.id.btnTurkiyeLigi);
Button btnPremierLig = (Button)findViewById(app.intentornek.R.id.btnPremierLig);

//click eventleri set ediliyor
btnTurkiyeLigi.setOnClickListener(this);
btnPremierLig.setOnClickListener(this);

}

@Override
public void onClick(View v) {

//Bir butonun click eventi fire edildiğinde buraya giriliyor,
//hangi butondan geldiği switch edilip buna göre önceden yaratılan intent set ediliyor.
Intent intent = new Intent();
switch (v.getId()) {
case app.intentornek.R.id.btnTurkiyeLigi:
intent.setClass(getApplicationContext(), app.intentornek.TurkiyeLigi.class);
startActivity(intent);
break;
case app.intentornek.R.id.btnPremierLig:
intent.setClass(getApplicationContext(), app.intentornek.PremierLig.class);
startActivity(intent);
break;
default:
Toast.makeText(getApplicationContext(), "lig bulunamadı", Toast.LENGTH_SHORT).show();
break;
}

}
}

Projemi çalıştırdığımda elde edeceğim görüntü aşağıdaki gibi olmalı.

Intentlere giriş amaçlı basit bir uygulama yaptık, bir sonraki konumuzda explicit ve implicit başlıkları altında konumuzu derinleştireceğiz.

Dosya İsmi: IntentsOrnek.rar Dosya Boyutu:41.59 KB

31 Mayıs 2011 Salı

Android Serisi 5. Bölüm - List Activity - Custom Adapter

Merhaba,

Kaldığımız yerden list activity ile devam ediyoruz. Her zaman olduğu gibi yine lafı hiç uzatmayacağım, örnek bir senaryo ile konuya bodozlama giriş yapıyoruz. İşte senaryo; kullanıcının karşısına Türk futbol takımlarının olduğu bir liste sunacağız, kullanıcı listedeki itemlardan birine bastığında seçimini ekrana yansıtacağız, eğer bu itemlardan birine uzunca basarsa silmek isteyip istemediğini soracak ve ona göre aksiyon alacağız. Kısaca bugüne kadar öğrendiklerimizi hafifçe bir toparlamış olacağız. Hadi başlayalım.

Önce yeni bir proje ve takimlar isimli yeni bir aktivite yaratıyoruz yalnız bu aktivitenin öncekilerden bir farkı olacak. Bu aktivitemiz öncekiler gibi Activity class'ından değil ListActivity class'ından extend edilecek.

Daha sonra custom adapter'ımızı oluşturmak için layout > row.xml'imizi yaratıp aşağıdaki gibi düzenliyoruz.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip">
<ImageView
android:id="@+id/imgLogo"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="6dip"
android:src="@drawable/icon" />
<LinearLayout
android:orientation="vertical"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="fill_parent">
<TextView
android:id="@+id/lblIsim"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center_vertical"
/>
<TextView
android:id="@+id/lblSampiyonlukSayisi"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:singleLine="true"
android:ellipsize="marquee"
/>
</LinearLayout>
</LinearLayout>

Bu işlemin ardından drawable klasörlerimize 32x32 takım logolarımızı atıyoruz.



Tamam sıra geldi Takım classımızı oluşturmaya, resimdeki gibi src klasörünün altında Takim adinda bir class yaratıyor ve aşağıdaki gibi kodluyoruz.



package com.tft;

public class Takim {

//constructorlar
public Takim(){}
public Takim(String isim, int sampiyonluk_sayisi,String logo){
this._isim = isim;
this._sampiyonlukSayisi = sampiyonluk_sayisi;
this._logo = logo;
}

//fieldlar
private String _isim;
private int _sampiyonlukSayisi;
private String _logo;

//propertyler
public String getIsim(){
return _isim;
}
public void setIsim(String isim){
_isim = isim;
}

public int getSampiyonlukSayisi(){
return _sampiyonlukSayisi;
}
public void setSampiyonlukSayisi(int sampiyonlukSayisi){
_sampiyonlukSayisi = sampiyonlukSayisi;
}

public String getLogo(){
return _logo;
}
public void setLogo(String logo){
_logo = logo;
}
}

Şimdi de sıra customadapter'ımızda, yine src klasöründe TakimAdapter adinda bir class oluşturup aşağıdaki gibi düzenliyoruz.

package com.tft;

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

class TakimAdapter extends ArrayAdapter<Takim> {
private Context context = null;
private ArrayList<Takim> items;

public TakimAdapter(Context context, int textViewResourceId, ArrayList<Takim> items) {
super(context, textViewResourceId, items);
this.items = items;
this.context = context;
}

public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
//inflaterlar xml inputu codebehind'da nesneye çevirmemizi sağlarlar.
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(com.tft.R.layout.row, null);
}
Takim takim = items.get(position);
if (takim != null) {
//listemizde gözükecek kontrollerimizi set ediyoruz.
TextView lblIsim = (TextView) v.findViewById(com.tft.R.id.lblIsim);
TextView lblSampiyonlukSayisi = (TextView) v.findViewById(com.tft.R.id.lblSampiyonlukSayisi);
ImageView imgLogo = (ImageView)v.findViewById(com.tft.R.id.imgLogo);
if (lblIsim != null) {
lblIsim.setText(takim.getIsim()); }
if(lblSampiyonlukSayisi != null){
lblSampiyonlukSayisi.setText("Şampiyonluk Sayısı: "+ takim.getSampiyonlukSayisi());
}
if(imgLogo != null){
//logolarımızın IDlerini alıyoruz.
int logoID = context.getResources().getIdentifier(takim.getLogo(), "drawable", context.getPackageName());
imgLogo.setImageResource(logoID);
}
}
return v;
}
}


Artık custom adapterımızda, Takim class'imizda hazır. Takimlar ListActivity'mizi yapılandırabiliriz.

package com.tft;

import java.util.ArrayList;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;

public class Takimlar extends ListActivity { //ListActivity classından türetildi

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//takimlari kendi yarattığım row bazında oluşturuyorum
final ArrayAdapter<Takim> adapter = new TakimAdapter(this, com.tft.R.layout.row, getTakimlar());
setListAdapter(adapter);

//itemlara tıklandığında yapılacak işlem
getListView().setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View v, int position,
long arg3) {
Takim oTakim = (Takim)parent.getItemAtPosition(position);
Toast.makeText(getBaseContext(),
oTakim.getIsim(),
Toast.LENGTH_SHORT).show();
}
});

//itemlara uzun basıldığında yapılacak işlem
getListView().setOnItemLongClickListener(new OnItemLongClickListener(){
public boolean onItemLongClick(AdapterView<?> parent, View v,
int position, long arg3) {
final Takim oTakim = (Takim)parent.getItemAtPosition(position);
//burada AlertDialog.Builder'ın constructor'ına dikkat edin. Listactivitymizin context'ini atıyoruz.
AlertDialog.Builder builder = new AlertDialog.Builder(Takimlar.this);
builder.setMessage("Bu takımı silmek istediğinizden emin misiniz?");
builder.setPositiveButton("Evet", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
adapter.remove(oTakim);
adapter.notifyDataSetChanged();
}
});
builder.show();
return false;
}

});
}

//Takimlar ekleniyor
private ArrayList<Takim> getTakimlar(){
ArrayList<Takim> takimList = new ArrayList<Takim>();
takimList.add(new Takim("Galatasaray",17,"gs"));
takimList.add(new Takim("Fenerbahçe",18,"fb"));
takimList.add(new Takim("Beşiktaş",13,"bjk"));
takimList.add(new Takim("Trabzonspor",6,"ts"));
takimList.add(new Takim("Bursaspor",1,"bs"));
return takimList;
}

}

Çalıştırdığımızda projemizin ekran görüntüleri aşağıdaki gibi olmalı.





Bir sonraki örnek uygulamamızda görüşmek üzere derken tekrar hatırlatmak istiyorum sorularınızı çekinmeden sorabilirsiniz, fırsat bulduğum müddetçe yanıtlamaya çalışacağım.

Dosya İsmi: ListActivityOrnek.rar
Dosya Boyutu:74.59 KB

30 Mayıs 2011 Pazartesi

Android Serisi 4. Bölüm - AlertDialog.Builder Sınıfı ve Dialog Kutuları

Merhaba arkadaşlar, tekrar birlikteyiz.

Konumuz gayet basit olmakla birlikte yazılım uygulamalarının da olmazsa olmazlarından biri. Biz yine lafı uzatmadan örnekle hemen işe koyulalım.

Senaryo şu; bir düğme var, kullanıcı düğmeye bastığında karşısına bir dialog box çıkacak. Sorulan soruya evet derse title değiştirilip rengi sarıya dönüştürülecek. Hayır derse bir mesajla bu seçimi kullanıcıya belirtilecek.

BuilderOrnek adinda bir proje yaratıyorum. Activity'imin adı ise Main.

Layout > main.xml dosyasını aşağıdaki gibi editliyorum.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:id="@+id/lblTitle"
/>

<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="BuilderDeneme"
android:text="Tıklandığında Alert oluşacak"
android:id="@+id/btnBuilder"
/>
</LinearLayout>

Son olarak Main.java activity'imi açıp aşağıdaki gibi düzenliyorum.

package com.builderornek;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class Main extends Activity {
private final Context context = this; //context'imizi globalleştiriyoruz.

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

//btnBuilder'a tıklandığında aşağıdaki method çalışacak.
public void BuilderDeneme(final View v){
//Dialog nesnesi oluşturuluyor.
AlertDialog.Builder builder = new AlertDialog.Builder(context);
//Kullanıcıya gösterilecek mesaj oluşturuluyor.
builder.setMessage("Devam ederek başlık yazısını değiştirmek istediğinizden emin misiniz?");
//Cancel buttonu iptal ediliyor (örnek olması amacıyla koydum)
builder.setCancelable(false);
//Kullanıcı tamam diyerek devam etmek istediğinde (true response'unda yapılacaklar.)
builder.setPositiveButton("Evet", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
TextView lblTitle = (TextView)findViewById(R.id.lblTitle);
lblTitle.setTextColor(Color.YELLOW);
lblTitle.setText("baslik değiştirildi ve rengi sarı oldu.");
}
});

//kullanıcı iptal diyerek devam etmek istediğinde. (false)
builder.setNegativeButton("Hayır", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "Bir değişiklik yapılmadı", Toast.LENGTH_SHORT).show();
}
});

//builder dialogumuzu kullanıcıya gösteriyoruz.
builder.show();
}

}

ve işte sonuç;



Dosya İsmi: BuilderOrnek.rar
Dosya Boyutu:41.49 KB