25 Ekim 2017 Çarşamba

Geliş İngilizcem Geliş

  Hiç yorum yok
25 Ekim




Aslında yıllardır hakkında konuşulan bir konu bu. Muhtemelen Youtube’da ya da diğer sosyal platformlarda görmüşsünüzdür “10 dakikada İngilizce Öğren” başlıklarını. Ben bunun aksine size bir ömür sürecek öğrenme metotlarından bahsedeceğim. Öncelikle İngilizcenin bir dil olduğunu ve dillerin sürekli gelişmekte olduğunu unutmayalım. Hadi daha fazla uzatmadan İngilizcemizi kendi kendimize nasıl geliştirebiliriz ona bakalım.

1) Voscreen

Öncelikle Voscreen benim favorilerimden biri. Voscreen, dizi/film sahnelerini kısa parçalar halinde dinletip, doğru çevirisini şıklar arasından seçmenizi istiyor. Voscreen’ı web sitesinden ya da telefonunuza uygulamasını yükleyerek (App Store/Google Play) kullanmaya başlayabilirsiniz.



2) Rong-Chang

Rong-Chang kısa kısa İngilizce hikayelerinin bulunduğu bir web sitesi. Eğer uzun makaleler ya da kitaplar okumak sizi sıkıyorsa, buradan istediğiniz konuda, istediğiniz seviyede kısa hikayeler bulabilirsiniz. Ayrıca bazı hikayelerin seslendirmeleri de mevcut. Bu hikayeleri dinleyerek kulak aşinalığı sağlamanız da mümkün.



3) Ororo.tv

Bu sitede dizi ya da animasyonları İngilizce altyazılı olarak izleyebiliyorsunuz. Peki güzelliği ne diyorsanız eğer, İngilizce altyazıda bilmediğiniz kelime çıktığında fareyi kelimenin üzerine getirirseniz size Türkçe çevirisini söylüyor.



4) YouGlish

Malumunuz Türkçe yazıldığı gibi okunan bir dil fakat İngilizce için aynı şeyi söylememiz pek mümkün değil. Youglish.com sayesinde telaffuzunu merak ettiğiniz kelimeyi aratıyorsunuz ve karşınıza arattığınız kelimenin geçtiği YouTube videoları geliyor. Videolar arasında ilerleyerek farklı kişilerden, aynı kelimenin telaffuzunu dinleyebilirsiniz.



5) BrainyQuote

Dünyanın her yerinden, müzisyenlerin, bilim insanlarının, siyasetçilerin, yazarların vb. önemli kişilerin sözlerini BrainyQuote sitesinde bulmak mümkün. Ayrıca bu sözler sayesinde pek çok deyim de öğrenilebilir.



6) Yabancı Siteler (Genel)

Günümüzde telefonlarımızın da akıllanmasından sonra günlük hayatımızda haberler için ya da araştırdığımız herhangi bir konu için bin bir çeşit sitede vakit harcıyoruz. Benim tavsiyem bu vaktinizin bir kısmını yabancı sitelerde harcamak. İngilizce haberler ve içerikler okuyun. Böylece günlük hayattaki İngilizce kalıplara da aşinalık kazanmış olursunuz. Örneğin: www.buzzfeed.com


7) Google Translate Eklentisi

Eğer bilgisayar başında yabancı sitelerde geziniyorsanız mutlaka tavsiye ediyorum. Okuduğunuz metinde bilmediğiniz bir kelime varsa fareyle kelimeyi seçiyorsunuz ve anında Türkçe karışılığını görüyorsunuz. Tabii bunun için Google Chrome tarayıcısını kullanmanız gerekiyor. Eklentiye bu bağlantıdan ulaşabilirsiniz: Google Translate Eklentisi



8) Elektronik Cihazlar

Bir diğer etkili yöntem ise kullandığınız elektronik cihazlarınızın dilini İngilizce yapmak. Eğer telefonunuzun ve bilgisayarınızın dilini İngilizce yaparsanız işinizi halletmek için ister istemez yeni kelimeler öğrenmek zorunda kalacaksınız.


9) Kitaplar

Okumak kelime bilgisini fazlasıyla geliştiren bir eylem. Kitapçılardan hem ucuz hem de seviyenize uygun ince kitaplar bulabilirsiniz. Kendi seviyenizin üstünde kitaplar seçmemeye özen gösterin çünkü okurken sürekli sözlüğe bakmak okuma isteğinizin kaybolmasına neden olabilir. Ayrıca mutlaka kitabın ilgi duyacağınız bir konuda olmasına da dikkat edin.


10) Yabancı Arkadaşlar

Eğer sosyal bir kişiyseniz, sosyal medya platformlarından ya da gerçek yaşantınızdan (üniversite, iş yaşantısı vb.) yabancı arkadaşlar edinin. Yabancı arkadaşlarınızla konuşurken hem İngilizcenizi canlı tutmuş olacak hem de yeni şeyler öğrenmiş olacaksınız. Eğer yabancı birini bulamıyorsanız sizin gibi İngilizcesini geliştirmek isteyen bir arkadaşınızla anlaşıp onunla İngilizce konuşmaya başlayın.



11) Sosyal Medya

Artık boş vakitlerimizi sosyal medyada geçirir olduk. Twitter, Instagram ve Facebook gibi platformlardan ünlü yabancı sayfaları takip etmeniz hem gündemi takip etmenize olanak sağlayacak hem de İngilizcenizi geliştirmenizde size yardımcı olacaktır.



12) Dizi/Film ya da Video

Aslında dizi ya da film izlemek hepimiz için en iyi ve en keyifli seçenek. Tabi Türkçe altyazılı olarak izlerseniz kendinizi senaryoya kaptırıp İngilizce’ye odaklanamayabilirsiniz. Bunun için her ne kadar zor olsada İngilizce altyazılı olarak izlemenizi tavsiye ediyorum.



13) Müzik

Eve, işe, okula giderken yolculuk sırasında, herhangi bir iş yaparken arka planda çalan ya da çeşitli sebeplerden ötürü her zaman hayatımızın bir parçası “müzik”. Müzik dinleyerek kulak aşinalığı sağlayabilir, müziklerin sözlerine bakarak yeni kelimeler öğrenebiliriz.



14) Ted Talks

Ted, dünyanın her yerinden alanında profesyonel konuşmacıları toplamış ve bunu bizler için yayınladığı bir platform oluşturmuş. Bu konuşmaları altyazılı bir şekilde izleyerek İngilizcenizi geliştireceğiniz gibi kendinizi diğer bilimsel alanlarda da geliştirebilirsiniz.



15) Oyun

Dünya üzerinde neredeyse tüm oyunlar İngilizce dil seçeneğine sahip. Eğer oyun tutkunuysan, oyunlarda geçen kelimeler ve konuşmalarla bile İngilizceni geliştirmen mümkün. Böylece hem eğlenirsin hem öğrenirsin.



16) Bonus

Ayrıca bir yazılımcı olarak bir proje geliştirdim. Projenin detaylarını kendi web sitemde paylaştım. Projeye bu bağlantıdan ulaşabilirsiniz: www.hcengiz.com/verb



Umarım faydalı olmuştur. Aklıma geldikçe ve yeni şeyler keşfettikçe buraya ekleyeceğim. Sizlerden ricam, siz de kendinizi geliştirin ve kendinizi nasıl geliştirdiğinizi, tecrübelerinizi ve bilgilerinizi diğer insanlarla paylaşın, paylaşın ki hep birlikte gelişelim.


Devamını oku

7 Şubat 2017 Salı

İngilizce Fiil Arama Motoru Projesi

  Hiç yorum yok
07 Şubat


Merhabalar, aslında bu makalede bir eğitim konusundan ziyade hazırladığım bir projeden bahsedeceğim.

Artık hangi meslek grubu olursa olsun İngilizce'nin öneminden bahsetmeye gerek yok sanırım, bu gayet klişe bir konu. Özellikle de biz yazılımcılar için.

Bende bu bağlamda birkaç araştırma yaparken bir şey farkettim ve soruşturmaya başladım. İngilizce'nin olmazsa olmazları ve insanların ezberlemekte zorlandıkları Verb1, Verb2, Verb3 ve onların anlamlarından bahsediyorum.

Eğer herhangi bir fiilin dönüşümünü hatırlamıyorsanız ya da bir okuma parçasında üçüncü halini gördüğünüz fiilin ikinci hali aklınıza takılıyorsa, o meşhur uzun listeyi açıp ya da diğer sözlükleri kullanıp fiilinizi aramaya koyuluyorsunuz. Ki bu bana göre ciddi zaman kaybı olmasının yanı sıra can sıkıcı bir durum.

Bu sebepten ben de hem kendim için hem de benim gibi düşünenler için bir proje geliştirdim. Sistemde yaklaşık 250 adet fiil bulunuyor. Bir fiilin hem ikinci hali, hem üçüncü hali hem de anlamını hesaba katarsak yaklaşık olarak 1000 adet veri demek. Bu da neredeyse tüm irregular verb'lerin sistemde bulunduğu anlamına geliyor.

Lafı daha fazla uzatmadan projenin kendisine geçelim. Aşağıdaki bağlantıya tıklayarak, hem masaüstü bilgisayarlarınızdan hem de responsive tasarımı sayesinde mobil telefonlarınızdan rahatlıkla kullanabilirsiniz.

İngilizce Fiil Arama Motoru:

http://www.hcengiz.com/p/verb.html

Devamını oku

15 Ekim 2015 Perşembe

#ANDROID - JSON Parse (ayrıştırma) İşlemi

  Hiç yorum yok
15 Ekim

Özellikle akıllı telefonlar hayatımızdaki yerini arttırdığından beri web servis işleri artık olmazsa olmaz bir hale gelmiş durumda. Çünkü hazırladığımız bir web sitesini kullanıcı sayısını arttırmak adına bir mobil uygulamaya dahil etmek istiyoruz. Durum böyle olunca uzak sunucudaki verilere ulaşmak için web servis yazmak zorunda kalıyoruz.

Biz son yılların en önemli ve iddialı web servis aracı JSON'ı kullanacağız.

Ben minibusyollari.com'un uygulamasını yapmak istediğim için burada onun üzerinden gideceğim.

Sol tarafta gördüğünüz gibi JSON dili bu şekilde kolay, anlaşılabilir ve basit bir dil.

Bu sayfa böyle aşağıya doğru uzayıp gidiyor. Yaklaşık 300 küsür tane hat bilgisi mevcut.

Biz buradaki hat isimlerini çekerek uygulamamızda listelemek istiyoruz.


Bu uygulamadaki sayfalarımız MainActiviy.java, mainactivity.xml, ServiceHandler.java ve list_item.xml şeklinde.

ServiceHandler.java sayfamızı yabancı bir abimiz yazmış ve bizde direkt olarak bu sayfayı urlden verileri almak için kopyalayacağız.

Madem öyle ilk olarak ServiceHandler.java dosyamızın kodlarını yazalım.

ServiceHandler.java dosyası:

package com.example.jsonparsing1;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

public class ServiceHandler {

static String response = null;
public final static int GET = 1;
public final static int POST = 2;

public ServiceHandler() {

}

/**
* Making service call
* @url - url to make request
* @method - http request method
* */
public String makeServiceCall(String url, int method) {
return this.makeServiceCall(url, method, null);
}

/**
* Making service call
* @url - url to make request
* @method - http request method
* @params - http request params
* */
public String makeServiceCall(String url, int method,
List<NameValuePair> params) {
try {
// http client
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpEntity httpEntity = null;
HttpResponse httpResponse = null;

// Checking http request method type
if (method == POST) {
HttpPost httpPost = new HttpPost(url);
// adding post params
if (params != null) {
httpPost.setEntity(new UrlEncodedFormEntity(params));
}

httpResponse = httpClient.execute(httpPost);

} else if (method == GET) {
// appending params to url
if (params != null) {
String paramString = URLEncodedUtils
.format(params, "utf-8");
url += "?" + paramString;
}
HttpGet httpGet = new HttpGet(url);

httpResponse = httpClient.execute(httpGet);

}
httpEntity = httpResponse.getEntity();
response = EntityUtils.toString(httpEntity);

} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return response;
}
}

Daha sonra bu verileri ListActivity'den kalıtacağımız (extends) için listemizin tasarımını yapmak üzere list_item.xml dosyamızı oluşturalım.

list_item.xml dosyası:

<?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="wrap_content"
android:orientation="vertical"
android:padding="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp" >

<!-- Name Label -->

<TextView
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dip"
android:paddingTop="6dip"
android:textColor="#43bd00"
android:textSize="16sp"
android:textStyle="bold" />

<!-- Email label -->
<TextView
android:id="@+id/email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dip"
android:textColor="#acacac" />

<!-- Mobile number label -->
<TextView
android:id="@+id/mobile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:text="Mobile: "
android:textColor="#5d5d5d"
android:textStyle="bold" />

</LinearLayout>

Tabi burada email label, mobile label falan yazıyor çok takılmayın yabancı kaynaktan araştırma yapmak zorunda kaldığımız için böyle oluyor. Amacına uygun, işimi görecek kadar düzenleme yaptım faso fisosuna karışmadım.

Neyse biz devam edelim. Şimdi mainactivity.xml dosyamızın içerine bir ListView ekliyoruz.

mainactivity.xml dosyası:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<!-- Main ListView
Always give id value as list(@android:id/list)
-->
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>

</LinearLayout>

Daha sonra hemen MainActivity.java kodlarımıza geçelim.

MainActivity.java dosyası:

package com.example.jsonparsing1;

import java.util.ArrayList;
import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;


public class MainActivity extends ListActivity {

private ProgressDialog pDialog;

// URL to get contacts JSON
private static String url = "http://minibusyollari.com/MinibusApi/";

// JSON Node names
private static final String TAG_HATLAR = "hatlar";
private static final String TAG_ID = "id";
private static final String TAG_NAME = "name";
private static final String TAG_URL = "url";

// contacts JSONArray
JSONArray contacts = null;

// Hashmap for ListView
ArrayList<HashMap<String, String>> contactList;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

contactList = new ArrayList<HashMap<String, String>>();

ListView lv = getListView();
// Calling async task to get json
new GetContacts().execute();
}

/**
* Async task class to get json by making HTTP call
* */
private class GetContacts extends AsyncTask<Void, Void, Void> {

@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Lütfen bekleyin...");
pDialog.setCancelable(false);
pDialog.show();

}

@Override
protected Void doInBackground(Void... arg0) {
// Creating service handler class instance
ServiceHandler sh = new ServiceHandler();

// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);

Log.d("Response: ", "> " + jsonStr);

if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);

// Getting JSON Array node
contacts = jsonObj.getJSONArray(TAG_HATLAR);

// looping through All Contacts
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);

String id = c.getString(TAG_ID);
String name = c.getString(TAG_NAME);
String url = c.getString(TAG_URL);

// tmp hashmap for single contact
HashMap<String, String> contact = new HashMap<String, String>();

// adding each child node to HashMap key => value
contact.put(TAG_ID, id);
contact.put(TAG_NAME, name);
contact.put(TAG_URL, url);

// adding contact to contact list
contactList.add(contact);
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Bu url'de veri yok.");
}

return null;
}

@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(
MainActivity.this, contactList,
R.layout.list_item, new String[] { TAG_ID, TAG_NAME,
TAG_URL }, new int[] { R.id.name,
R.id.email, R.id.mobile });

setListAdapter(adapter);
}

}

}

Evet burada da JsonArray ve JsonObject ayrıştırmalarını yapıp ListView'imizde listeliyoruz. Bu kısmı anlayabilmek için JSON diline hakim olmak gerek.

Onun haricinde kodlarımızı kullanıcıya JSON çekme ve işleme sırasında bir dialog gösterebilmek için AsynTask içerinde yazıyoruz.

onPreExecute() kısmında dialog'u oluşturuyoruz, doInBackground kısmında JSON ayrıştırma kodlarımızı yazıyoruz, son olarak onPostExecute kısmında ise dialogu kapatıp listeleme işlemini yapıyoruz.

Makale görseli:

Devamını oku

#ANDROID - Fragmentler ile SwipeTab

  Hiç yorum yok
15 Ekim

Evet bir önceki makalemizde fragment'den bahsetmiş ve ScrollTab ile ilgili bir uygulama yapmıştık.

Önceki makale: http://www.hcengiz.com/2015/10/android-fragmentler-ile-scrolltab_15.html

Daha detaylı bilgi için önceki makalemizi inceleyebilirsiniz. ScrollTab örneğinde yukarıdaki tab'lara tıklandığında fragmentleri değiştiremiyor, sadece parmak kaydırma hareketiyle fragmentler arasında geçiş yapabiliyorduk.

Bu uygulamamızda bu sorunu çözeceğiz. ActionBar kullanarak yukarıdaki tablara bastığımızda istediğimiz fragmente geçiş yapacağız.

Fragment kısmında diğer uygulamadan farklı olacak hiçbir şey yok, değişiklikler yine MainActivity kısmında olacak.

Hemen FragmenA.java, FragmentB.java, FragmentC.java, fragmena.xml, fragmentb.xml ve fragmentc.xml dosyalarımızı oluşturuyoruz.

fragmenta.xml dosyası:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffcc00"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Bu Fragment A"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

fragmentb.xml dosyası:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#245"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Bu Fragment B"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

fragmentc.xml dosyası:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#931334"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Bu Fragment C"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

.XML uzantılı dosyalarımızı hazırladık şimdi .JAVA uzantılı dosyalarımızı oluşturup bu Layoutlarımızı orada tanıtıyoruz.

FragmentA.java dosyası:

package com.example.fragmentscrolltab;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
public class FragmentA extends Fragment {
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
 
        View view = inflater.inflate(R.layout.fragmenta, container, false);
        return view;
    }
 
}

FragmentB.java dosyası:

package com.example.fragmentscrolltab;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
public class FragmentB extends Fragment {
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
 
        View view = inflater.inflate(R.layout.fragmentb, container, false);
        return view;
    }
 
}

FragmentC.java dosyası:

package com.example.fragmentscrolltab;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
public class FragmentC extends Fragment {
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
 
        View view = inflater.inflate(R.layout.fragmentc, container, false);
        return view;
    }
 
}

mainactiviy.xml dosyası:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


</android.support.v4.view.ViewPager>

MainActiviy.java dosyası:

package com.example.fragmentswipetab;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;


public class MainActivity extends FragmentActivity implements ActionBar.TabListener {

    ActionBar actionbar;
    ViewPager viewpager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        viewpager = (ViewPager) findViewById(R.id.pager);
        viewpager.setAdapter(new MyAdapter(getSupportFragmentManager()));
        viewpager.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {
                actionbar.setSelectedNavigationItem(position);
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {

            }
        });

        actionbar = getActionBar();
        actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        ActionBar.Tab tab1 = actionbar.newTab();
        tab1.setText("Tab 1");
        tab1.setTabListener(this);

        ActionBar.Tab tab2 = actionbar.newTab();
        tab2.setText("Tab 2");
        tab2.setTabListener(this);

        ActionBar.Tab tab3 = actionbar.newTab();
        tab3.setText("Tab 3");
        tab3.setTabListener(this);

        actionbar.addTab(tab1);
        actionbar.addTab(tab2);
        actionbar.addTab(tab3);
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {

    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        viewpager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {

    }

    class MyAdapter extends FragmentPagerAdapter {

        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int i) {
            switch (i) {
                case 0:
                    return new FragmentA();
                case 1:
                    return new FragmentB();
                case 2:
                    return new FragmentC();
            }
            return null;
        }

        @Override
        public int getCount() {
            return 3;
        }

    }

}

Evet bu uygulamamızda MainActivity içerisinde PagerTitleStrip kullanmak yerine ActionBar kullanarak tabların üzerine basıldığında fragment değiştirme olayını da yapmış olduk.

Makale görseli:

Devamını oku

#ANDROID - Fragmentler ile ScrollTab

  Hiç yorum yok
15 Ekim

Androidde bin bir çeşit activity oluşturup kullanıcıyı oradan oraya yönlendirerek uygulamalar yazabiliriz ancak bunun çok daha pratik bir yolu var. Bu yol fragment kullanmaktan geçiyor.

Fragment kullanarak oluştuğumuz  tüm -halk değimiyle- sayfaları MainActivity'de göstereceğiz ve kullanıcı parmağını sağa sola kaydırdığında fragmentler arasında geçiş yapacağız.

Twitter, Facebook, Instagram, Snapchat vs. vs. diye devam eder yani neredeyse ileri düzey tüm uygulamalar bu yapıyı kullanıyor.

Şimdi hemen işe koyulalım. Öncelikle derli toplu olması adına bize gerekecek sayfaları yazmakta fayda var. Yeni bir proje oluşturduğumuzda MainActivity otomatik olarak geliyor zaten. Biz FragmentA.java, FragmentB.java, FragmentC.java, fragmenta.xml, fragmentb.java ve fragmentc.java dosyalarını oluşturacağız.

Üç adet fragment oluşturmamızın özel hiçbir nedeni yok sadece örnek olsun diye yapıyoruz siz daha fazla ya da daha az oluşturabilirsiniz.

Bizim yapacağımız tüm işler MainActivity'de biteceği için oluşturduğumuz fragment sayfalarının üzerinden hızlıca bir geçelim. .xml uzantılı dosyalarımızda örneğin: "Bu Fragment A sayfası." yazılı bir TextView var bir de diğerlerinden ayırt edilmesi için üç fragmentin LinearLayout'una farklı backgroundlar atadık.

fragmenta.xml dosyası:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffcc00"
android:orientation="vertical" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Bu Fragment A"
android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

fragmentb.xml dosyası:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#245"
android:orientation="vertical" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Bu Fragment B"
android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

fragmentc.xml dosyası:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#931334"
android:orientation="vertical" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Bu Fragment C"
android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

.XML uzantılı dosyalarımızı hazırladık şimdi .JAVA uzantılı dosyalarımızı oluşturup bu Layoutlarımızı orada tanıtıyoruz.

FragmentA.java dosyası:

package com.example.fragmentscrolltab;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragmentA extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub

View view = inflater.inflate(R.layout.fragmenta, container, false);
return view;
}

}

FragmentB.java dosyası:

package com.example.fragmentscrolltab;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragmentB extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub

View view = inflater.inflate(R.layout.fragmentb, container, false);
return view;
}

}

FragmentC.java dosyası:

package com.example.fragmentscrolltab;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragmentC extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub

View view = inflater.inflate(R.layout.fragmentc, container, false);
return view;
}

}

Evet artık fragmentlerimiz hazır. Şimdi bu fragmentleri MainActivity'de çağıracağız ve parmak kaydırma hareketiyle ekranda gösterilmesini sağlayacağız.

mainactivity.xml'de çok dikkat edilmesi gereken bir nokta var. Burada bir Layout değil ViewPager kullanacağız. IDE (Eclipse) bunu bize otomatik olarak getirmiyor bu nedenle elle yazmak zorundayız.

MainActivity.xml dosyası:

<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/pager">

<android.support.v4.view.PagerTitleStrip
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_gravity="top"
android:background="#33b5e5"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:textSize="15dp">
</android.support.v4.view.PagerTitleStrip>

</android.support.v4.view.ViewPager>

Ve ayrıca "tab" (fragment) başlıklarımızı ekranda göstermek için ViewPager'ın içerisine PagerTitleStrip tanımlıyoruz.

Daha sonra artık kodlarımızı yazmaya başlayabiliriz.

MainActivity.java dosyası:

package com.example.fragmentscrolltab;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;

public class MainActivity extends FragmentActivity {

ViewPager viewpager = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

viewpager = (ViewPager) findViewById(R.id.pager);

FragmentManager fm = getSupportFragmentManager();
viewpager.setAdapter(new MyAdaptor(fm));
}

class MyAdaptor extends FragmentPagerAdapter {

public MyAdaptor(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int i) {

Fragment fragment = null;

if(i==0) //Seçilen A'ise
{
fragment = new FragmentA();
}
else if(i==1) //Seçilen B'ise
{
fragment = new FragmentB();
}
else //Seçilen C'ise
{
fragment = new FragmentC();
}

return fragment; //Hangi ekranın seçildiğinin bilgisini tutar.
}

@Override
public int getCount() {
return 3; //Kaç tane ekrana geçiş yapılacağının bilgisini tutar.
}

//Ekrana başlık gelmesi için bu metodu oluşturuyoruz.
@Override
public CharSequence getPageTitle(int i)
{
if (i == 0) {
return "Birinci Tab";
} else if (i == 1) {
return "Ikinci Tab";
} else if (i == 2) {
return "Üçüncü Tab";
}
return null;
}
}


}

Evet artık uygulamamız hazır. Kod bloklarında zaten açıklama satırıyla neyin ne olduğunu belirttiğim için burada açıklamıyorum.

Son olarak bundan önceki her makalemizde activity'mizi AndroidManifest.xml dosyasında tanıtmayı unutmayalım yazmıştım. Burada fragment kullandığımız için böyle bir derdimiz yok.

Makale görseli:

Devamını oku