Layout içeriğini runtime sırasında viewlarla doldurabiliriz.
AdapterView ın subclassları bir Adapter objesiyle datayı layout a bağlar.
Adapter veriyi bir array yada veritabanı sorgusundan alır, buradaki her bir entry yi layouta eklenebilecek birer View e dönüştürür.
Adapter kullanan layoutlar ListView ve GridView dır.
Bunların kullandığı Adapter ler ArrayAdapter ve SimpleCursorAdapter dır.
Adapter ın okuduğu veri değiştiğinde bunu refresh etmesi için "notifyDataSetChanged()" metodunu çağırmak gerekir.
AdapterView ın gösterdiği elemanlardan herhangi birine tıklandığı eventi yakalamak için AdapterView.OnItemClickListener interface ini implement ederiz. Örneğin:
// Create a message handling object as an anonymous class.
private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position, long id) {
// Do something in response to the click
}
};
listView.setOnItemClickListener(mMessageClickedHandler);
Kendi listemizi yapmak için önce bir item classı yazıp, sonra bu classin elemanlarını içeren bir arraylist i dolduruyoruz. Bunları da baseAdapter classdan extend ettiğimiz bir custom adapter e bagliyoruz.
BaseAdapter deki 4 metodu override etmek gerekiyor:
getCount(): int değer döner. ListView'da gösterilecek satır sayısını ifade eder. Verilerimizi barındıran ArrayList'in boyutu (size()) burada bize yarayacak.
getItem(int position): Object değer döner. position ile belirtilen satıra denk düşen nesneyi döndürür. Bu nesne satır olarak gösterilecek nesnedir. Bundan dolayı Object yerine doğrudan model sınıfınızdan oluştuğunuz nesneyi de dönüş türü olarak belirleyebilirsiniz.
getItemId(int position): long değer döndürmelidir. Veri listesinde position ile sırası belirtilen satırın kimlik numarasını (id) döndürür. Liste içeriğini veri tabanına kaydedecekseniz ya da orada eşlemeler yapacaksanız önem kazanır.
getView(int position, View convertView, ViewGroup parent): View değer döner. position ile sırası belirtilen satır için bir View döndürür. Bu metot içindeyken her satır için XMLi okuyup View haline getirme işlemi (inflating) yaparız. Bu hususta bize LayoutInflater servisi yardımcı olacaktır.
Örneğin:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ListView
android:id="@+id/liste"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/simge"
android:layout_width="48dp"
android:layout_height="48dp" />
<TextView
android:id="@+id/isimsoyisim"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
public class Kisi {
private String isim;
private boolean kadinMi;
public Kisi(String isim, boolean kadinMi) {
super();
this.isim = isim;
this.kadinMi = kadinMi;
}
@Override
public String toString() {
return isim;
}
public String getIsim() {
return isim;
}
public void setIsim(String isim) {
this.isim = isim;
}
public boolean isKadinMi() {
return kadinMi;
}
public void setKadinMi(boolean kadinMi) {
this.kadinMi = kadinMi;
}
}
public class MainActivity extends Activity {
final List<Kisi> kisiler=new ArrayList<Kisi>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
kisiler.add(new Kisi("Ahmet Yılmaz", false));
kisiler.add(new Kisi("Ayşe Küçük", true));
kisiler.add(new Kisi("Fatma Bulgurcu", true));
kisiler.add(new Kisi("İzzet Altınmeşe", false));
kisiler.add(new Kisi("Melek Subaşı", true));
kisiler.add(new Kisi("Selim Serdilli",false));
kisiler.add(new Kisi("Halil İbrahim",false));
}
}
public class OzelAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private List<Kisi> mKisiListesi;
public OzelAdapter(Activity activity, List<Kisi> kisiler) {
//XML'i alıp View'a çevirecek inflater'ı örnekleyelim
mInflater = (LayoutInflater) activity.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
//gösterilecek listeyi de alalım
mKisiListesi = kisiler;
}
@Override
public int getCount() {
return mKisiListesi.size();
}
@Override
public Kisi getItem(int position) {
//şöyle de olabilir: public Object getItem(int position)
return mKisiListesi.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View satirView;
satirView = mInflater.inflate(R.layout.satir_layout, null);
TextView textView =
(TextView) satirView.findViewById(R.id.isimsoyisim);
ImageView imageView =
(ImageView) satirView.findViewById(R.id.simge);
Kisi kisi = mKisiListesi.get(position);
textView.setText(kisi.getIsim());
if (kisi.isKadinMi()) {
imageView.setImageResource(R.drawable.kadin_simge);
}
else {
imageView.setImageResource(R.drawable.adam_simge);
}
return satirView;
}
}
Etiketler
abstraction
Accord Framework
ajax
android
architecture
Array
assets
async task
AsyncTask
authorization
avd
billy joel
button
Classification
collections
component
concurrency
container
data science
database
Decision Tree
Decision Trees
dhcp
distributed
donma
emülatör
encapsulation
exception
express
Feature extraction
Feature Selection
garbage collection
glassfish
google
grafik
güvenlik
hadoop
http
IDE
inheritance
j2ee
jade
java
java.lang
JDBC
jls
JNDI
JSF
jsp
kitap
lib
link
Machine Learning
Marmara Üniversitesi
material design
maven
mongodb
multiple inheritance
nested class
netbeans
network
node.js
NoSQL
oop
Oracle
ORM
pass-by-value
pattern
permission
polymorphism
PrimeFaces
primitive
Project Euler
protocol
R
response
REST
RMI
root
Scala
servlet
Set
sözlük
spring
sqlite
tasarım desenleri
tcp/ip
template
test
thread
tier
toast
tomcat
türk telekom
twitter
UI thread
virtual device
web application
web design
web service
WEKA
wireshark
Hiç yorum yok:
Yorum Gönder