15 Ekim 2015 Perşembe

#ANDROID - Fragmentler ile SwipeTab

  Hiç yorum yok
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:

Hiç yorum yok :

Yorum Gönder