{"id":929,"date":"2015-01-17T10:00:00","date_gmt":"2015-01-17T08:00:00","guid":{"rendered":"http:\/\/metehantoksoy.com\/?p=929"},"modified":"2015-01-17T10:00:00","modified_gmt":"2015-01-17T08:00:00","slug":"android-listview-ve-custom-adapter-kullanimi","status":"publish","type":"post","link":"https:\/\/metehantoksoy.com\/?p=929","title":{"rendered":"Android &#8211; ListView ve Custom Adapter Kullan\u0131m\u0131"},"content":{"rendered":"<p><a href=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/android-for-wallpaper-81.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-966 size-full\" src=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/android-for-wallpaper-81.png\" alt=\"android-wallpaper\" width=\"600\" height=\"300\" srcset=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/android-for-wallpaper-81.png 600w, https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/android-for-wallpaper-81-300x150.png 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/a><\/p>\n<p>Bir \u00f6nceki <a title=\"Android \u2013 Android Mimarisi, Activity ve Fragment!\" href=\"https:\/\/metehantoksoy.com\/2015\/01\/02\/android-android-mimarisi-activity-ve-fragment\/\" target=\"_blank\">yaz\u0131mda <\/a>art\u0131k kod \u00f6rnekleri \u00fczerinden devam edece\u011fimizi s\u00f6ylemi\u015ftik. Bir sonraki yaz\u0131m, bir <strong>Web API<\/strong>&#8216;dan <strong>GET<\/strong> methodu ile <strong>JSON<\/strong> format\u0131nda veri \u00e7ekip, bunu parse edip <strong>ListView<\/strong> i\u00e7inde g\u00f6stermek \u00fczerine olacak. Bundan dolay\u0131 bu yaz\u0131mda ba\u015fta <strong>ListView<\/strong> olmak \u00fczere di\u011fer <strong>View<\/strong>&#8216;lar ve <strong>Layout<\/strong>&#8216;lara deyinip <strong>ListView<\/strong>&#8216;da nas\u0131l veri g\u00f6sterece\u011fimizden bahsedece\u011fim.<\/p>\n<h2 style=\"text-align:center;\"><strong><span style=\"color:#003366;\">Layout&#8217;lar<\/span><\/strong><\/h2>\n<p><strong>LinearLayout<\/strong>: \u0130\u00e7ine yerle\u015ftirilen View&#8217;lar\u0131n yatay veya dikey olarak hizalanmas\u0131n\u0131 sa\u011flar.<\/p>\n<p><!--more--><\/p>\n<p><strong>TableLayout<\/strong>: \u0130\u00e7ine yerle\u015ftirilen View&#8217;lar\u0131n t\u0131pk\u0131 HTML&#8217;deki gibi tr\/td mant\u0131\u011f\u0131yla yerle\u015ftirmemize olanak tan\u0131r. Bu olana\u011f\u0131 <em><strong>TableRow<\/strong> <\/em>layout&#8217;u ile sa\u011flar.<\/p>\n<p><strong>GridLayout<\/strong>: \u0130\u00e7ine yerle\u015ftirilen View&#8217;lar\u0131n sat\u0131r ve s\u00fct\u00fcn numaras\u0131 verilerek yerle\u015ftirilmesidir. Burada dikkat edilmesi gereken i\u00e7indeki View&#8217;lara verdi\u011finiz maksimum sat\u0131r ve s\u00fctun b\u00fcy\u00fckl\u00fc\u011f\u00fcnde GridLayout&#8217;da sat\u0131r ve s\u00fctun tan\u0131mlamas\u0131 yapmakt\u0131r.<\/p>\n<p><strong>RelativeLayout<\/strong>: \u0130\u00e7ine yerle\u015ftirilen View&#8217;lar\u0131n layout&#8217;a g\u00f6re veya birbirlerine g\u00f6re konumlanmalar\u0131na sa\u011flar. Bir nevi View&#8217;lar aras\u0131nda ili\u015fki kurar. Boyut, kenar bo\u015fluklar\u0131 gibi uzunluklar\u0131\u00a0kapsar.<\/p>\n<p>Bir <strong>Layout<\/strong> i\u00e7in gerekli 3 <em><strong>attribute<\/strong> <\/em>tan\u0131mlamas\u0131\u00a0vard\u0131r. Bunlardan birincisi <strong>XML Namespace<\/strong>&#8216;dir. <strong>XML Namespace<\/strong> (<em>xmlns<\/em>) en \u00fcstte bulunan (<em>parent<\/em>) layout&#8217;ta yap\u0131l\u0131r ise altlarda yap\u0131lmas\u0131na gerek yoktur. Bu XML&#8217;de meydana gelebilecek kar\u0131\u015f\u0131kl\u0131klar\u0131 engellemek i\u00e7indir. Zira ayn\u0131 attribute&#8217;un iki namespace&#8217;de de yer almas\u0131 durumunda bu namespace&#8217;lere isim vermek gerekir. <strong>Namespace<\/strong> tan\u0131mlarken verilen URL adresi ise buradaki kal\u0131ba uygun bi\u00e7imdedir veya bu adresteki veriye, ki\u015fiye veya kurulu\u015fa \u00f6zel yaz\u0131lm\u0131\u015ft\u0131r anlam\u0131ndad\u0131r. <strong>Android<\/strong>&#8216;de bu yaz\u0131m\u0131zda biz &#8220;<strong>android<\/strong>&#8221; ve &#8220;<strong>tool<\/strong>&#8221; namespace&#8217;lerini kullan\u0131yoruz. &#8220;<strong>android<\/strong>&#8221; ve &#8220;<strong>tool<\/strong>&#8221; namespace&#8217;larinin tan\u0131mlar\u0131n\u0131 \u015fu \u015fekilde yap\u0131yoruz:<\/p>\n<blockquote>\n<pre>xmlns:<span style=\"color:#333399;\">android<\/span>=<span style=\"color:#008000;\">\"http:\/\/schemas.android.com\/apk\/res\/android\"<\/span>\nxmlns:<span style=\"color:#333399;\">tools<\/span>=<span style=\"color:#008000;\">\"http:\/\/schemas.android.com\/tools\"<\/span><\/pre>\n<\/blockquote>\n<p><strong>Main Activity&#8217;<\/strong>mizde yer alan <strong>RelativeLayout<\/strong>&#8216;un tan\u0131mlamas\u0131n\u0131 da yukar\u0131da bilgilerden yola \u00e7\u0131karak a\u015fa\u011f\u0131daki gibi yapabiliriz, fakat bu zaten Android Studio&#8217;da bo\u015f layout dosyalar\u0131nda <strong>haz\u0131r gelir<\/strong>.<\/p>\n<blockquote>\n<pre><span style=\"color:#ff6600;\">&lt;RelativeLayout<\/span>\n xmlns:<span style=\"color:#333399;\">android<\/span>=<span style=\"color:#008000;\">\"http:\/\/schemas.android.com\/apk\/res\/android\"<\/span>\n xmlns:<span style=\"color:#333399;\">tools<\/span>=<span style=\"color:#008000;\">\"http:\/\/schemas.android.com\/tools\"<\/span>\n <span style=\"color:#333399;\">android<\/span>:layout_width=<span style=\"color:#008000;\">\"match_parent\"<\/span>\n <span style=\"color:#333399;\">android<\/span>:layout_height=<span style=\"color:#008000;\">\"match_parent\"<\/span>\n <span style=\"color:#333399;\">tools<\/span>:context=<span style=\"color:#008000;\">\".MainActivity\"\n\n<\/span><span style=\"color:#808080;\"><em>&lt;!-- Layout veya View'larda Attribute tan\u0131mlamalar\u0131 burada yap\u0131l\u0131r --&gt;\u00a0<\/em><\/span><span style=\"color:#ff6600;\">&gt;\n\n&lt;\/RelativeLayout&gt;<\/span><\/pre>\n<\/blockquote>\n<p>View&#8217;larda ise isimlerinden anla\u015f\u0131laca\u011f\u0131 \u00fczere metin i\u00e7in <strong>TexView<\/strong>, buton i\u00e7in <strong>Button<\/strong>, resim i\u00e7in <strong>ImageView<\/strong>, resim butonu i\u00e7in <strong>ImageButton<\/strong>, internet sayfas\u0131 g\u00f6r\u00fcnt\u00fclemek i\u00e7in <strong>WebView,<\/strong> View&#8217;lar\u0131n ba\u015fl\u0131calar\u0131d\u0131r.<\/p>\n<h3 style=\"text-align:center;\"><span style=\"color:#008080;\"><strong>ListView<\/strong><\/span><\/h3>\n<p>Asl\u0131n konumuz olan <strong>ListView<\/strong>&#8216;a gelirsek, ad\u0131ndan anla\u015f\u0131laca\u011f\u0131 \u00fczere bu View&#8217;da bir \u015feyleri liste halinde g\u00f6sterebiliyoruz.<\/p>\n<figure id=\"attachment_933\" aria-describedby=\"caption-attachment-933\" style=\"width: 163px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/listview_schema.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-933 size-medium\" src=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/listview_schema.png?w=163\" alt=\"Bu resim http:\/\/www.vogella.com\/tutorials\/AndroidListView\/article.html adresinden al\u0131nm\u0131\u015ft\u0131r.\" width=\"163\" height=\"300\" srcset=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/listview_schema.png 234w, https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/listview_schema-163x300.png 163w\" sizes=\"auto, (max-width: 163px) 85vw, 163px\" \/><\/a><figcaption id=\"caption-attachment-933\" class=\"wp-caption-text\">Bu resim http:\/\/www.vogella.com\/tutorials\/AndroidListView\/article.html adresinden al\u0131nm\u0131\u015ft\u0131r.<\/figcaption><\/figure>\n<p><strong>ListView<\/strong>, <em><strong>herhangi bir java s\u0131n\u0131f\u0131<\/strong>ndan<\/em> objeleri listeleyebilir. Tek \u00f6nemli olan bu objelerin bir <strong>Adapter<\/strong> arac\u0131l\u0131\u011f\u0131yla <strong>ListView<\/strong>&#8216;a tan\u0131t\u0131lmas\u0131. <strong>Adapter<\/strong>, gerekli olan bilgileri ListView&#8217;\u0131n her sat\u0131r\u0131nda g\u00f6sterecektir. <strong>Adapter<\/strong> sadece <strong>ListView<\/strong>&#8216;da kullan\u0131lmaz. <strong>AdapterView<\/strong>\u00a0s\u0131n\u0131f\u0131n\u0131\u00a0extend eden yani AdapterView s\u0131nf\u0131n\u0131n\u00a0\u00e7ocuc\u011fu olan (<em>child<\/em>)\u00a0olan her \u015feyde kullan\u0131labilir.<\/p>\n<h3 style=\"text-align:center;\"><span style=\"color:#008080;\"><strong>Adapter<\/strong><\/span><\/h3>\n<p><strong>Adapter<\/strong>, verileri bir <strong>layout<\/strong> <strong>dosyas\u0131na<\/strong> uygun olarak yani bir <strong>modele<\/strong> uygun bi\u00e7imde <strong>View<\/strong>&#8216;\u0131n i\u00e7inde g\u00f6stermemizi\u00a0sa\u011flayan adapt\u00f6rd\u00fcr. <strong>BaseAdapter<\/strong>\u00a0s\u0131n\u0131f\u0131n\u0131\u00a0extend eder. Android, <strong>varsay\u0131lan adapt\u00f6r<\/strong> deste\u011fi sunar. Yani kendi adapt\u00f6r s\u0131n\u0131f\u0131m\u0131z\u0131\u00a0ve o s\u0131n\u0131fa\u00a0uygun layout&#8217;u yazmaya gerek kalmadan varsay\u0131lan olarak metin (<em>String<\/em>) dizisini ListView&#8217;a atamay\u0131 sa\u011flayan &#8220;<strong>ArrayAdapter<\/strong>&#8220;i kullanabiliriz.<\/p>\n<h4 style=\"text-align:center;\"><span style=\"color:#008000;\"><strong>Custom Adapter<\/strong><\/span><\/h4>\n<p><strong>Custom Adapter<\/strong>, ListView&#8217;da sadece metin\u00a0de\u011fil <strong>daha farkl\u0131 tipte<\/strong> veriyi <strong>daha farkl\u0131 \u015fekilde<\/strong> g\u00f6stermemizi sa\u011flayan bir yap\u0131d\u0131r. <strong>Custom Adapter<\/strong> i\u00e7in bir <strong>layout<\/strong> dosyas\u0131 ve bir de <strong>Custom Adapter s\u0131n\u0131f\u0131<\/strong>\u00a0gereklidir. <strong>Layout dosyas\u0131<\/strong>, ListView&#8217;daki her <strong>sat\u0131r\u0131n g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc<\/strong> ve <strong>componentlerini<\/strong> belirlemektedir. Custom Adapter, varsay\u0131lan adapt\u00f6rleri\u00a0veya <strong>BaseAdapter<\/strong>\u00a0s\u0131nf\u0131n\u0131\u00a0extend ederek t\u00fcretilir.<\/p>\n<p>Gerekli tan\u0131mlamalar\u0131 yapt\u0131ktan sonra art\u0131k bunlar\u0131 kullanaca\u011f\u0131m\u0131z <strong>\u00f6rnek<\/strong> program\u0131m\u0131za ge\u00e7elim. \u00d6rnek program\u0131m\u0131zda, ListView&#8217;da \u00a0ki\u015filerin\u00a0<em><strong>adlar\u0131<\/strong><\/em>, <em><strong>telefonu<\/strong> <\/em>ve <em><strong>resimlerini<\/strong> <\/em>g\u00f6sterece\u011fimiz bir yap\u0131 kuraca\u011f\u0131z. Ki\u015filerimizi bir <em><strong>liste<\/strong> <\/em>olarak olu\u015fturup, bunu ListView&#8217;da g\u00f6sterece\u011fiz. Bu ki\u015fileri elimizde <strong>liste<\/strong> olarak tutup (<em>olu\u015fturup<\/em>) bunlar\u0131 ListView&#8217;da g\u00f6sterece\u011fimiz i\u00e7in ArrayAdapter&#8217;i extend eden <strong>PersonAdapter<\/strong>\u00a0s\u0131nf\u0131m\u0131z\u00a0ve bu ListView&#8217;\u0131n her sat\u0131r\u0131n\u0131 belirleyecek olan <strong>Layout<\/strong> dosyam\u0131z olacakt\u0131r. \u00d6nce Layout dosyas\u0131n\u0131 olu\u015ftural\u0131m.<\/p>\n<h2 style=\"text-align:center;\"><span style=\"color:#003366;\"><strong>Projeye Layout Dosyas\u0131 Ekleme<\/strong><\/span><\/h2>\n<h2 style=\"text-align:center;\"><a href=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/screenshot-112.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-936 size-large\" src=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/screenshot-112.png?w=660\" alt=\"Creating Layout\" width=\"660\" height=\"495\" srcset=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/screenshot-112.png 800w, https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/screenshot-112-300x225.png 300w, https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/screenshot-112-768x576.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/a><\/h2>\n<p>Sol tarafta bulunan Project men\u00fcs\u00fcnden <strong>res<\/strong> (<em>Resources<\/em>) alt\u0131nda bulunan <strong>layout<\/strong> klas\u00f6r\u00fcne sa\u011f t\u0131k yap\u0131n <em><strong>(1)<\/strong><\/em> . <strong>New<\/strong> men\u00fcs\u00fcne t\u0131klay\u0131n <em><strong>(2)<\/strong><\/em>. <strong>Layout resource file<\/strong>&#8216;\u0131 se\u00e7in\u00a0<em><strong>(3)<\/strong><\/em>.<\/p>\n<p><a href=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/addlayout21.png\"><img loading=\"lazy\" decoding=\"async\" class=\" size-large wp-image-938 aligncenter\" src=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/addlayout21.png?w=660\" alt=\"Add Layout\" width=\"660\" height=\"395\" srcset=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/addlayout21.png 840w, https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/addlayout21-300x180.png 300w, https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/addlayout21-768x460.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/a><\/p>\n<p>Layout dosyas\u0131n\u0131n ad\u0131n\u0131 girin <em><strong>(1)<\/strong><\/em>. \u0130pucu olarak belirtmek gerekirse\u00a0isimlendirmelerde belirli standard\u0131n\u0131z olsun. Yani ,\u00f6rnek olarak e\u011fer ListView&#8217;da kullanaca\u011f\u0131n\u0131z bir layout ise &#8220;<em><strong>layout_listview_itemtemplate<\/strong><\/em>&#8221; tarz\u0131nda bir isim <strong>anla\u015f\u0131l\u0131rl\u0131\u011f\u0131 art\u0131racakt\u0131r<\/strong>, veya e\u011fer bir ListView&#8217;a <strong>ID<\/strong> veriyorsan\u0131z <em><strong>listview<\/strong> <\/em>yerine <em><strong>listview_persons<\/strong> <\/em>tarz\u0131nda bir isimlendirmeyi tercih edebilirsiniz. Layout&#8217;da varsay\u0131lan olarak gelecek layout tipini se\u00e7iniz. Bunu daha sonradan de\u011fi\u015ftirebiliriz. \u00c7ok \u00f6nemli <em><strong>olmamakla<\/strong><\/em> birlikte i\u015fimizi kolayla\u015ft\u0131rmaktad\u0131r. Layout&#8217;un alt taraf\u0131nda bo\u015fta kalan alanlar , ListView&#8217;\u0131n sat\u0131rlar\u0131na atan\u0131rken \u00a0otomatik olarak g\u00f6z\u00fckmeyecektir.<\/p>\n<h3><strong><span style=\"color:#008080;\">Custom Adapter \u0130\u00e7in Layout Olu\u015fturma<\/span><\/strong><\/h3>\n<p><strong>Layout<\/strong> dosyas\u0131n\u0131 olu\u015fturduk. \u015eimdi i\u00e7ini doldural\u0131m. Bizim 2 tane metin alan\u0131na (<em><strong>TextView<\/strong><\/em>) ve 1 tane resim alan\u0131na (<em><strong>ImageView<\/strong><\/em>) ihtiyac\u0131m\u0131z var. Bunlar\u0131 istersek layout&#8217;u a\u00e7t\u0131ktan sonraki ekranda desing (<em>tasar\u0131m<\/em>) sekmesinden, istersek de text (<em>xml kod<\/em>) sekmesinden\u00a0ekleyebiliriz. \u00d6ncelikle layout tipimiz <strong>RelativeLayout<\/strong>. Bunun nedeni componentlerin (<em>bile\u015fenler<\/em>) boyutlar\u0131n\u0131 ve konumlar\u0131n\u0131 birbirine ba\u011flayaca\u011f\u0131m ve biri de\u011fi\u015firse birbirlerini de\u011fi\u015ftirmesini sa\u011flayaca\u011f\u0131m. <strong>ImageView<\/strong>&#8216;\u0131 \u00a0yani ki\u015fi resmini sola yerle\u015ftiriyorum ve \u00a0<strong>sabit<\/strong> bir y\u00fckseklik-geni\u015flik veriyorum. Y\u00fckseklik ve geni\u015flik olarak 75<em>dp<\/em> veriyorum.<\/p>\n<blockquote>\n<pre><span style=\"color:#ff6600;\">&lt;ImageView<\/span>\n <span style=\"color:#000080;\">android<\/span>:layout_width=<span style=\"color:#008000;\">\"75dp\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:layout_height=<span style=\"color:#008000;\">\"75dp\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:id=<span style=\"color:#008000;\">\"@+id\/imageView_personpic\" <\/span><span style=\"color:#ff6600;\">\/&gt;<\/span><\/pre>\n<\/blockquote>\n<p><strong>ImageView<\/strong>&#8216;\u0131n soluna ve tepeden <strong>ImageView<\/strong>&#8216;la ayn\u0131 mesefade isim i\u00e7in bir <strong>TextView<\/strong> yerle\u015ftiriyorum. <strong>ImageView<\/strong>&#8216;a ba\u011flamam\u0131n nedeni e\u011fer ImageView&#8217;\u0131n konumu \u00fcstten\u00a0bir \u015fekilde de\u011fi\u015ftirse TextView&#8217;\u0131n da o kadar a\u015fa\u011f\u0131ya veya yukar\u0131ya <strong>kaymas\u0131<\/strong> i\u00e7indir. Metin boyutunu 25<em>dp<\/em>&#8216;ye ayarl\u0131yorum. Soldan 10<em>dp<\/em>&#8216;lik bir bo\u015fluk b\u0131rak\u0131yorum ki <strong>ImageView<\/strong> yani ki\u015fi resmi ile aras\u0131nda biraz bo\u015fluk olsun.<\/p>\n<blockquote>\n<pre><span style=\"color:#ff6600;\"> &lt;TextView<\/span>\n <span style=\"color:#000080;\">android<\/span>:layout_width=<span style=\"color:#008000;\">\"match_parent\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:layout_height=<span style=\"color:#008000;\">\"wrap_content\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:text=<span style=\"color:#008000;\">\" \"<\/span>\n <span style=\"color:#000080;\">android<\/span>:id=<span style=\"color:#008000;\">\"@+id\/textView_personname\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:layout_toEndOf=<span style=\"color:#008000;\">\"@+id\/imageView_personpic\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:textSize=<span style=\"color:#008000;\">\"25dp\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:layout_alignParentTop=<span style=\"color:#008000;\">\"true\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:layout_toRightOf=<span style=\"color:#008000;\">\"@+id\/imageView_personpic\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:layout_marginLeft=<span style=\"color:#008000;\">\"10dp\"<\/span> <span style=\"color:#ff6600;\">\/&gt;<\/span><\/pre>\n<\/blockquote>\n<p>\u0130sim <strong>TextView<\/strong>&#8216;\u0131n\u0131n alt\u0131nda adres i\u00e7in bir <strong>TextView<\/strong> daha ekliyorum. Onunda sol, sa\u011f ve \u00fcst konumunu isim TextView&#8217;\u0131na ba\u011fl\u0131yorum ki ayn\u0131 hizada g\u00f6z\u00fcks\u00fcnler. Metin boyutu olarak da 20<em>dp<\/em> veriyorum.<\/p>\n<blockquote>\n<pre><span style=\"color:#ff6600;\">&lt;TextView<\/span>\n <span style=\"color:#000080;\">android<\/span>:layout_width=<span style=\"color:#008000;\">\"match_parent\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:layout_height=<span style=\"color:#008000;\">\"wrap_content\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:text=<span style=\"color:#008000;\">\" \"<\/span>\n <span style=\"color:#000080;\">android<\/span>:id=<span style=\"color:#008000;\">\"@+id\/textView_address\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:layout_below=<span style=\"color:#008000;\">\"@+id\/textView_personname\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:layout_alignLeft=<span style=\"color:#008000;\">\"@+id\/textView_personname\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:layout_alignStart=<span style=\"color:#008000;\">\"@+id\/textView_personname\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:textSize=<span style=\"color:#008000;\">\"20dp\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:layout_alignBottom=<span style=\"color:#008000;\">\"@+id\/imageView_personpic\"<\/span>\n <span style=\"color:#000080;\">android<\/span>:layout_marginTop=<span style=\"color:#008000;\">\"5dp\"<\/span><span style=\"color:#ff6600;\"> \/&gt;<\/span><\/pre>\n<\/blockquote>\n<p>Layout dosyas\u0131n\u0131 tamamlad\u0131\u011f\u0131m\u0131za g\u00f6re \u015fimdi <strong>PersonAdapter<\/strong>\u00a0s\u0131n\u0131f\u0131m\u0131za\u00a0ge\u00e7ebiliriz.<\/p>\n<h2 style=\"text-align:center;\"><span style=\"color:#003366;\"><strong>Projeye S\u0131n\u0131f\u00a0Eklemek<\/strong>\u00a0<\/span><\/h2>\n<p><a href=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/screenshot-113.png\"><img loading=\"lazy\" decoding=\"async\" class=\" size-large wp-image-940 aligncenter\" src=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/screenshot-113.png?w=660\" alt=\"Adding Class\" width=\"660\" height=\"566\" srcset=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/screenshot-113.png 700w, https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/screenshot-113-300x257.png 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/a><\/p>\n<p><strong>java<\/strong> klas\u00f6r\u00fc alt\u0131nda bulunan <em><strong>com.metehantoksoy.customadapter<\/strong><\/em> \u015feklinde olan klas\u00f6re sa\u011f t\u0131klay\u0131n <em><strong>(1)<\/strong><\/em>. <strong>New<\/strong> men\u00fcs\u00fc <em><strong>(2)<\/strong><\/em> alt\u0131nda <strong>Java Class<\/strong>&#8216;\u0131 se\u00e7in <em><strong>(3)<\/strong><\/em>.<\/p>\n<p><a href=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/createclass2.png\"><img loading=\"lazy\" decoding=\"async\" class=\" size-full wp-image-941 aligncenter\" src=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/createclass2.png\" alt=\"createclass2\" width=\"361\" height=\"158\" srcset=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/createclass2.png 361w, https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/createclass2-300x131.png 300w\" sizes=\"auto, (max-width: 361px) 85vw, 361px\" \/><\/a><\/p>\n<p>Ard\u0131ndan s\u0131n\u0131fa\u00a0ismini verin <em><strong>(1)<\/strong><\/em> ve tipini se\u00e7in <em><strong>(2)<\/strong><\/em>. Bu y\u00f6ntemle sadece s\u0131n\u0131f\u00a0de\u011fil <strong>Interface<\/strong>,\u00a0<strong>Enum<\/strong> gibi tipleri de ekleyebilirsiniz. \u0130simlendirmede yine yukar\u0131da dedi\u011fim \u015feyleri hat\u0131rlayabilirsiniz.<\/p>\n<h3><strong><span style=\"color:#008080;\">PersonAdapter S\u0131n\u0131f\u0131n\u0131n Kodlanmas\u0131<\/span><\/strong><\/h3>\n<p>Bo\u015f bir <strong>s\u0131n\u0131f\u00a0<\/strong>olarak <strong>PersonAdapter<\/strong> a\u00e7\u0131ld\u0131 ve a\u015fa\u011f\u0131daki gibi bir kod ile kar\u015f\u0131la\u015ft\u0131n\u0131z.<\/p>\n<blockquote>\n<pre><strong><span style=\"color:#993300;\">public<\/span> <span style=\"color:#993300;\">class<\/span><\/strong> PersonAdapter {\n}<\/pre>\n<\/blockquote>\n<p>\u015eimdi bu s\u0131n\u0131f\u0131\u00a0<strong>Person<\/strong> tipinde <strong>ArrayAdapter<\/strong> s\u0131n\u0131f\u0131na\u00a0extend edelim.<\/p>\n<blockquote>\n<pre><strong><span style=\"color:#993300;\">public class<\/span><\/strong> PersonAdapter <span style=\"color:#993300;\"><strong>extends<\/strong> <\/span>ArrayAdapter&lt;Person&gt; {\n}<\/pre>\n<\/blockquote>\n<p>Burada baz\u0131 methodlar\u0131\u00a0yazmad\u0131\u011f\u0131m\u0131z i\u00e7in <strong>hata ald\u0131k<\/strong>. Bu varsay\u0131lan <strong>kurucu methodudur<\/strong>. Yani <strong>bunun anlam\u0131<\/strong> ArrayAdapter s\u0131n\u0131f\u0131\u00a0bo\u015f(<em>varsay\u0131lan<\/em>) kurucu methodu desteklemiyor, <strong>ArrayAdapter<\/strong> s\u0131n\u0131ndan\u00a0bize uygun kurucuyu PersonAdapter s\u0131n\u0131f\u0131m\u0131za yaz\u0131yoruz.<\/p>\n<blockquote>\n<pre><span style=\"color:#993300;\"><strong>  public<\/strong> <\/span>PersonAdapter(Context context, <strong><span style=\"color:#993300;\">int<\/span> <\/strong>resource, List&lt;Person&gt; items) {\n      <strong><span style=\"color:#993300;\">super<\/span><\/strong>(context<span style=\"color:#993300;\">,<\/span> resource<span style=\"color:#993300;\">,<\/span> items)<span style=\"color:#993300;\">;<\/span>\n }<\/pre>\n<\/blockquote>\n<p>Daha sonra, ListView&#8217;da objelerin eklenmesini ve g\u00f6z\u00fckmesini sa\u011flayacak <em><strong>getView()<\/strong><\/em>\u00a0methodunu\u00a0yazmaya ba\u015flayal\u0131m. Methodun\u00a0ilk olarak bo\u015f halini parametreleri ile yazal\u0131m.<\/p>\n<blockquote>\n<pre><span style=\"color:#ff9900;\"><strong>@Override<\/strong><\/span>\n<strong><span style=\"color:#993300;\">public<\/span> <\/strong>View <strong><span style=\"color:#ff6600;\">getView<\/span><\/strong>(<strong><span style=\"color:#993300;\">int<\/span><\/strong> position<span style=\"color:#993300;\">,<\/span> View convertView<span style=\"color:#993300;\">,<\/span> ViewGroup parent) {\n\n}<\/pre>\n<\/blockquote>\n<p><strong>ListView<\/strong> i\u00e7in haz\u0131rlam\u0131\u015f oldu\u011fumuz <strong>layout<\/strong> dosyas\u0131ndan bir <strong>View<\/strong> olu\u015fturulup, bu fonksiyona\u00a0<em><strong>convertView<\/strong> <\/em>de\u011fi\u015fkeniyle parametre ge\u00e7ilmi\u015f. Fakat e\u011fer View olu\u015fturulmam\u0131\u015fsa olu\u015fturmam\u0131z gerekir \u00e7\u00fcnk\u00fc <strong>ImageView<\/strong> ve <strong>TextView<\/strong>&#8216;lar\u0131m\u0131za ula\u015f\u0131rken bu <strong>View<\/strong>&#8216;\u0131 kullanaca\u011f\u0131z.<\/p>\n<blockquote>\n<pre>View v = convertView<span style=\"color:#993300;\">;<\/span>\n<span style=\"color:#993300;\"><strong>if<\/strong> <\/span>(v == <span style=\"color:#993300;\"><strong>null<\/strong><\/span>) {\n     LayoutInflater vi<span style=\"color:#993300;\">;<\/span>\n     vi = LayoutInflater.from(getContext())<span style=\"color:#993300;\">;<\/span>\n     v = vi.inflate(R.layout.<em><span style=\"color:#333399;\">layout_listview_itemtemplate<\/span><\/em>, <span style=\"color:#993300;\"><strong>null<\/strong><\/span>)<span style=\"color:#993300;\">;<\/span>\n}<\/pre>\n<\/blockquote>\n<p>Daha sonra, adapt\u00f6r\u00fcm\u00fcz\u00fcn\u00a0kurucusunda verdi\u011fimiz <strong>Person<\/strong> tipindeki List&#8217;teden \u015fu anki s\u0131radaki nesneyi getiriyoruz. \u00dcst s\u0131n\u0131fta\u00a0bizim parametre olarak verdi\u011fimiz <strong>List<\/strong> tipindeki liste &#8220;<em><strong>private<\/strong><\/em>&#8221; olarak tutuldu\u011fu i\u00e7in ve bu <strong>ArrayAdapter<\/strong>\u00a0s\u0131n\u0131f\u0131n\u0131 extend etti\u011fimiz i\u00e7in bu <strong>private<\/strong> <strong>de\u011fi\u015fkene<\/strong> eri\u015femeyece\u011fimiz i\u00e7in, bu i\u015f i\u00e7in yap\u0131lm\u0131\u015f <em><strong>getItem()<\/strong><\/em>\u00a0methoduyla\u00a0s\u0131radaki nesnemizi listemizden getiriyoruz. B\u00f6ylece onun de\u011ferlerine eri\u015fip o sat\u0131rdaki ImageView ve TextView&#8217;lara atayabilece\u011fiz.<\/p>\n<blockquote>\n<pre>Person p = getItem(position)<span style=\"color:#993300;\">;<\/span><\/pre>\n<\/blockquote>\n<p>E\u011fer bu nesne <strong>bo\u015f de\u011filse<\/strong> art\u0131k gerekli yerlere atama yapabiliriz. \u00a0Ve <strong>sonunda<\/strong> o d\u00f6ng\u00fcde yarat\u0131lan View&#8217;\u0131 geri d\u00f6nd\u00fcrerek kodu bitiriyoruz.<\/p>\n<blockquote>\n<pre><strong><span style=\"color:#993300;\">if<\/span> <\/strong>(p != <strong><span style=\"color:#993300;\">null<\/span><\/strong>) {\n     ImageView personImage = (ImageView)v.findViewById(R.id.<em><span style=\"color:#333399;\">imageView_personpic<\/span><\/em>)<span style=\"color:#993300;\">;<\/span>\n     TextView personName = (TextView)v.findViewById(R.id.<em><span style=\"color:#333399;\">textView_personname<\/span><\/em>)<span style=\"color:#993300;\">;<\/span>\n     TextView personAdress = (TextView)v.findViewById(R.id.<em><span style=\"color:#333399;\">textView_address<\/span><\/em>)<span style=\"color:#993300;\">;<\/span>\n \n     <strong><span style=\"color:#993300;\">if<\/span><\/strong>(personImage != <strong><span style=\"color:#993300;\">null<\/span> <\/strong>&amp;&amp; personName != <strong><span style=\"color:#993300;\">null<\/span> <\/strong>&amp;&amp; personAdress != <strong><span style=\"color:#993300;\">null<\/span><\/strong>){\n         personAdress.setText(p.getAddress())<span style=\"color:#993300;\">;<\/span>\n         personName.setText(p.getName())<span style=\"color:#993300;\">;<\/span>\n         personImage.setImageResource(p.getPictureResourceID())<span style=\"color:#993300;\">;<\/span>\n     }\n}\n <strong><span style=\"color:#993300;\">return<\/span><\/strong> v<span style=\"color:#993300;\">;<\/span><\/pre>\n<\/blockquote>\n<p>Bu method yani <em><strong>getView()<\/strong><\/em> methodu, listedeki <strong>her obje i\u00e7in<\/strong> ba\u015ftan \u00e7al\u0131\u015f\u0131r, bunun nedeni her obje, bir layout&#8217;ta g\u00f6sterilip bu layout&#8217;un ListView&#8217;a <strong>sat\u0131r<\/strong> olarak eklenmesidir. Bundan dolay\u0131 her defas\u0131nda listemizdeki tek <strong>Person<\/strong> objesi i\u00e7in \u00e7al\u0131\u015f\u0131yor ve objenin de\u011ferlerini <strong>layout&#8217;a<\/strong> yaz\u0131yor.<\/p>\n<h3><strong><span style=\"color:#008080;\">Person S\u0131n\u0131f\u0131n\u0131n Kodlanmas\u0131<\/span><\/strong><\/h3>\n<p>Bir <strong>Person<\/strong> (<em>Ki\u015fi<\/em>) s\u0131n\u0131f\u0131n\u0131n\u00a0i\u00e7erisinde <strong>Name<\/strong> (<em>\u0130sim<\/em>), <strong>Address<\/strong> (A<em>dres<\/em>) ve ki\u015finin resminin drawable id&#8217;sini tuttu\u011fumuz <strong>PicResID&#8217;<\/strong>den olu\u015fmaktad\u0131r.<\/p>\n<blockquote>\n<pre><strong><span style=\"color:#993300;\">public class<\/span><\/strong> Person {\n \u00a0 \u00a0\u00a0<strong><span style=\"color:#993300;\">private<\/span> <\/strong>String <span style=\"color:#333399;\">Name<\/span><span style=\"color:#993300;\">;<\/span>\n \u00a0 \u00a0\u00a0<strong><span style=\"color:#993300;\">private<\/span> <\/strong>String <span style=\"color:#333399;\">Address<\/span><span style=\"color:#993300;\">;<\/span>\n \u00a0 \u00a0\u00a0<strong><span style=\"color:#993300;\">private<\/span> <\/strong>int <span style=\"color:#333399;\">PicResID<\/span><span style=\"color:#993300;\">;<\/span>\n\u00a0  \u00a0\u00a0<strong><span style=\"color:#993300;\">public<\/span> <\/strong>Person(String name, String address){\n \u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0<span style=\"color:#333399;\">Name<\/span> = name<span style=\"color:#993300;\">;<\/span>\n \u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0<span style=\"color:#333399;\">Address<\/span> = address<span style=\"color:#993300;\">;<\/span>\n \u00a0 \u00a0\u00a0}\n \u00a0 \u00a0\u00a0<strong><span style=\"color:#993300;\">public<\/span><\/strong> Person(String name, String address,<span style=\"color:#993300;\"><strong>int<\/strong><\/span> imageID){\n \u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0<span style=\"color:#333399;\">Name<\/span> = name<span style=\"color:#993300;\">;<\/span>\n \u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0<span style=\"color:#333399;\">Address<\/span> = address<span style=\"color:#993300;\">;<\/span>\n \u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0<span style=\"color:#333399;\">PicResID<\/span> = imageID<span style=\"color:#993300;\">;<\/span>\n \u00a0 \u00a0\u00a0}\n \u00a0 \u00a0\u00a0<strong><span style=\"color:#993300;\">public<\/span> <\/strong>String <span style=\"color:#ff6600;\">getName<\/span>() {\n \u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0<strong><span style=\"color:#993300;\">return<\/span> <\/strong><span style=\"color:#333399;\">Name<\/span><span style=\"color:#993300;\">;<\/span>\n \u00a0 \u00a0\u00a0}\n\u00a0    <strong><span style=\"color:#993300;\">public<\/span> <\/strong>String <span style=\"color:#ff6600;\">getAddress<\/span>() {\n \u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0<strong><span style=\"color:#993300;\">return<\/span> <\/strong><span style=\"color:#333399;\">Address<\/span><span style=\"color:#993300;\">;<\/span>\n \u00a0 \u00a0\u00a0}\n\u00a0 \u00a0\u00a0 <span style=\"color:#993300;\"><strong>public<\/strong> <strong>int<\/strong><\/span> <span style=\"color:#ff6600;\">getPictureResourceID<\/span>() {\n \u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0<strong><span style=\"color:#993300;\">return<\/span> <\/strong><span style=\"color:#333399;\">PicResID<\/span><span style=\"color:#993300;\">;<\/span>\n \u00a0 \u00a0\u00a0}\n}<\/pre>\n<\/blockquote>\n<h3><strong><span style=\"color:#008080;\">Custom Adapter Kullan\u0131larak ListView&#8217;da Objelerin G\u00f6sterilmesi<\/span><\/strong><\/h3>\n<p>\u015eimdi ana akvitimizde (<em>MainActivity<\/em>) program a\u00e7\u0131l\u0131r a\u00e7\u0131lmaz listemizin olu\u015fmas\u0131 i\u00e7in <em><strong>onCreate()<\/strong><\/em> methodu i\u00e7erisinde <em><strong>setContentView()<\/strong><\/em> method \u00e7a\u011fr\u0131s\u0131ndan sonra <strong>Person<\/strong> tipinde bir <strong>ArrayList<\/strong> olu\u015fturup 2 yeni <strong>Person<\/strong> ekleyelim.<\/p>\n<blockquote>\n<pre>ArrayList&lt;Person&gt; persons = <strong><span style=\"color:#993300;\">new<\/span><\/strong> ArrayList&lt;Person&gt;()<span style=\"color:#993300;\">;<\/span>\npersons.add(<strong><span style=\"color:#993300;\">new<\/span> <\/strong>Person(<span style=\"color:#003300;\">\"Ahmet Uzun\"<\/span><span style=\"color:#993300;\">,<\/span><span style=\"color:#003300;\">\"ISTANBUL\"<\/span><span style=\"color:#993300;\">,<\/span>R.drawable.<span style=\"color:#333399;\">ahmet_uzun<\/span>))<span style=\"color:#993300;\">;<\/span>\npersons.add(<strong><span style=\"color:#993300;\">new<\/span><\/strong> Person(<span style=\"color:#003300;\">\"Ay\u015fe Kanmaz\"<\/span><span style=\"color:#993300;\">,<\/span><span style=\"color:#003300;\">\"ANKARA\"<\/span><span style=\"color:#993300;\">,<\/span>R.drawable.<span style=\"color:#333399;\">ayse_kanmaz<\/span>))<span style=\"color:#993300;\">;<\/span><\/pre>\n<\/blockquote>\n<p>Bu listemizi kullanarak <strong>PersonAdapter<\/strong> tipinde bir <strong>ArrayAdapter<\/strong> objesi olu\u015fturup bu ListView&#8217;\u0131m\u0131za <em><strong>setAdapter()<\/strong><\/em> methodu ile atayal\u0131m.<\/p>\n<blockquote>\n<pre>PersonAdapter personAdapter = <strong><span style=\"color:#993300;\">new<\/span> <\/strong>PersonAdapter(<span style=\"color:#993300;\"><strong>this<\/strong>,<\/span>R.layout.<span style=\"color:#333399;\">layout_listview_itemtemplate<\/span><span style=\"color:#993300;\">,<\/span>persons)<span style=\"color:#993300;\">;<\/span>\n\nListView listviewPerson = (ListView)findViewById(R.id.<span style=\"color:#333399;\">listView_persons<\/span>)<span style=\"color:#993300;\">;<\/span>\n<strong><span style=\"color:#993300;\">if<\/span><\/strong>(listviewPerson != <span style=\"color:#993300;\"><strong>null<\/strong><\/span>){\n     listviewPerson.setAdapter(personAdapter)<span style=\"color:#993300;\">;<\/span>\n}<\/pre>\n<\/blockquote>\n<p>\u0130\u015fte bu kadar. Art\u0131k custom bir ListView&#8217;\u0131m\u0131z\u0131 ve <strong>onun \u015fablon modeli<\/strong> olan bir layout dosyas\u0131 ve s\u0131n\u0131f\u0131m\u0131z\u00a0mevcut. Bundan sonras\u0131 sizin hayal g\u00fcc\u00fcn\u00fczde. \u015eehiri kullan\u0131c\u0131 ile ayn\u0131\u00a0olan sat\u0131rlardaki adres TextView&#8217;inin \u00a0rengini ye\u015fil yapabilir, farkl\u0131 fontlar atayabilir veya daha \u00a0bir \u00e7ok \u015fey yapabilirsiniz. Kodlar\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda a\u015fa\u011f\u0131daki gibi bir ekran g\u00f6r\u00fcnt\u00fcs\u00fc elde edeceksiniz.<\/p>\n<p><a href=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/screenshot_2015-01-17-02-34-0511.png\"><img loading=\"lazy\" decoding=\"async\" class=\" size-medium wp-image-949 aligncenter\" src=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/screenshot_2015-01-17-02-34-0511.png?w=169\" alt=\"screenshot_2015-01-17-02-34-051\" width=\"169\" height=\"300\" srcset=\"https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/screenshot_2015-01-17-02-34-0511.png 720w, https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/screenshot_2015-01-17-02-34-0511-169x300.png 169w, https:\/\/metehantoksoy.com\/wp-content\/uploads\/2015\/01\/screenshot_2015-01-17-02-34-0511-576x1024.png 576w\" sizes=\"auto, (max-width: 169px) 85vw, 169px\" \/><\/a><\/p>\n<p>Projeyi b\u00fct\u00fcn olarak <a title=\"GitHub - CustomAdapter\" href=\"https:\/\/github.com\/birfincankafein\/metehantoksoy.com\/tree\/master\/Android\/CustomAdapter\" target=\"_blank\">GitHub <\/a>\u00fczerinden <a title=\"GitHub - CustomAdapter\" href=\"https:\/\/github.com\/birfincankafein\/metehantoksoy.com\/tree\/master\/Android\/CustomAdapter\" target=\"_blank\">bu linkten<\/a> eri\u015febilirsiniz. Bir sonraki yaz\u0131m\u0131zda g\u00f6r\u00fc\u015fmek \u00fczere \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bir \u00f6nceki yaz\u0131mda art\u0131k kod \u00f6rnekleri \u00fczerinden devam edece\u011fimizi s\u00f6ylemi\u015ftik. Bir sonraki yaz\u0131m, bir Web API&#8216;dan GET methodu ile JSON format\u0131nda veri \u00e7ekip, bunu parse edip ListView i\u00e7inde g\u00f6stermek \u00fczerine olacak. Bundan dolay\u0131 bu yaz\u0131mda ba\u015fta ListView olmak \u00fczere di\u011fer View&#8216;lar ve Layout&#8216;lara deyinip ListView&#8216;da nas\u0131l veri g\u00f6sterece\u011fimizden bahsedece\u011fim. Layout&#8217;lar LinearLayout: \u0130\u00e7ine yerle\u015ftirilen View&#8217;lar\u0131n yatay &hellip; <a href=\"https:\/\/metehantoksoy.com\/?p=929\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Android &#8211; ListView ve Custom Adapter Kullan\u0131m\u0131&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[13,2],"tags":[28,35,76,79,143,153,155,157,158,215,251],"class_list":["post-929","post","type-post","status-publish","format-standard","hentry","category-android","category-development","tag-activity","tag-android","tag-custom-adapter","tag-custom-listview","tag-java","tag-layout","tag-linearlayout","tag-listview","tag-listview-customize","tag-relativelayout","tag-view"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/metehantoksoy.com\/index.php?rest_route=\/wp\/v2\/posts\/929","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/metehantoksoy.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/metehantoksoy.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/metehantoksoy.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/metehantoksoy.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=929"}],"version-history":[{"count":0,"href":"https:\/\/metehantoksoy.com\/index.php?rest_route=\/wp\/v2\/posts\/929\/revisions"}],"wp:attachment":[{"href":"https:\/\/metehantoksoy.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=929"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/metehantoksoy.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=929"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/metehantoksoy.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}