3

I want to make my viewPager support Rtl ,and set the current item on the last fragment, but when I write this code in my MainActivity.java , I don't know how I can access the last fragment.

iViewPager.setCurrentItem();

this is my MainActivity.java where I define the viewPager

package com.example.imajid.grid2.activities;

import android.support.design.widget.NavigationView;
import android.support.design.widget.TabLayout;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

import com.example.imajid.grid2.R;
import com.example.imajid.grid2.adapters.PagerAdapter;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private DrawerLayout mDrawerLayout;


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


        //----------------------- set toolbar
        Toolbar iToolbar = (Toolbar) findViewById(R.id.xmlToolbar);
        setSupportActionBar(iToolbar);


        //------------------------------ initialize toolbar
        ActionBar actionBar = getSupportActionBar();
        actionBar.setHomeAsUpIndicator(R.drawable.menu);
        actionBar.setDisplayHomeAsUpEnabled(true);

        //****************************  find tablayout *****************************//
        TabLayout iTabLayout = (TabLayout) findViewById(R.id.xmlTabLayout);
        iTabLayout.addTab(iTabLayout.newTab());
        iTabLayout.addTab(iTabLayout.newTab());
        iTabLayout.addTab(iTabLayout.newTab());

        iTabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

        //*******************************  Array list for sending titles *********************************//

        ArrayList<String> viewPagersTitle = new ArrayList<String>();

        viewPagersTitle.add("صفحه اصلی");
        viewPagersTitle.add("فیلم");
        viewPagersTitle.add("آهنگ");

        //******************************* find view pager in xml *****************************//

        ViewPager iViewPager = (ViewPager) findViewById(R.id.xmlViewPager);

        //************************************** Rtlizer view pager ************************************

        ====>iViewPager.setCurrentItem();


        //**************************************  find adapter for view pager *******************************//

        PagerAdapter viewPagerAdapter = new PagerAdapter(getSupportFragmentManager() , iTabLayout.getTabCount() , viewPagersTitle);

        //************************************  set adapter for view pager *******************************//
        iViewPager.setAdapter(viewPagerAdapter);

        //***********************************  setup tablayout to view pager********************************//
        iTabLayout.setupWithViewPager(iViewPager);




        mDrawerLayout = (DrawerLayout) findViewById(R.id.xmlDrawerLayoutRoot);


        //-------------------------------------- find navigation view
        NavigationView navigationView = (NavigationView)findViewById(R.id.xmlNavigation);
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {
                menuItem.setChecked(true);
                mDrawerLayout.closeDrawers();
                Toast.makeText(MainActivity.this , menuItem.getTitle() , Toast.LENGTH_SHORT).show();
                return true;
            }
        });


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return true;

    }


    //onoptionItemSelected
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int itemId = item.getItemId();
        String btnName = null;

        switch (itemId){
            case android.R.id.home:
                mDrawerLayout.openDrawer(GravityCompat.START);
                return  true;

            case R.id.menu_setting:
                btnName = "Setting";
                break;
            case R.id.menu_compass:
                btnName = "Compass";
                break;
            case R.id.menu_help:
                btnName = "Help";
                break;

        }

        Toast.makeText(MainActivity.this , "You clicked at " + btnName , Toast.LENGTH_SHORT).show();
        return true;
    }

}

and this is my view pager adapter

package com.example.imajid.grid2.adapters;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;

import com.example.imajid.grid2.fragments.TabFragment1;
import com.example.imajid.grid2.fragments.TabFragment2;
import com.example.imajid.grid2.fragments.TabFragment3;

import java.util.ArrayList;

/**
 * Created by imajid on 12/8/2015.
 */
public class PagerAdapter extends FragmentStatePagerAdapter {

    private ArrayList<String> titles;
    int numOfTabs;

    public PagerAdapter(FragmentManager fm , int numOfTabs , ArrayList<String> titles) {
        super(fm);
        this.numOfTabs =numOfTabs;
        this.titles = titles;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position){

            case 0:
                TabFragment1 tab1 = new TabFragment1();
                return tab1;
            case 1:
                TabFragment2 tab2 = new TabFragment2();
                return tab2;
            case 2:
                TabFragment3 tab3 = new TabFragment3();
                return tab3;
            default:
                return null;

        }
    }

    @Override
    public int getCount() {
        return  this.numOfTabs;
    }


    @Override
    public CharSequence getPageTitle(int position) {
        return titles.get(position);
    }
}
gaurav jain
  • 3,119
  • 3
  • 31
  • 48
kiana rahimi
  • 246
  • 4
  • 16

3 Answers3

1

You can change your some portion of code::

@Override
public Fragment getItem(int position) {
    switch (position){

        case 2://change it from 0 -> max
            TabFragment1 tab1 = new TabFragment1();
            return tab1;
        case 1:
            TabFragment2 tab2 = new TabFragment2();
            return tab2;
        case 0:
            TabFragment3 tab3 = new TabFragment3();
            return tab3;
        default:
            return null;

    }
}

or you can even change the fragment name too::

@Override
public Fragment getItem(int position) {
    switch (position){

        case 0:
            TabFragment3 tab3 = new TabFragment3();
            return tab3;
        case 1:
            TabFragment2 tab2 = new TabFragment2();
            return tab2;
        case 2:
            TabFragment1 tab1 = new TabFragment1();
            return tab1;
        default:
            return null;

    }
}

try this out ..

Anil Prajapati
  • 457
  • 3
  • 10
  • thank you for your Answer but your sulotion is not working , please see this topic http://stackoverflow.com/questions/13489723/how-to-reverse-the-direction-of-viewpager-to-left-to-right-order – kiana rahimi Dec 14 '15 at 13:10
0

you can use

HomeListFragment fragment = 
      (HomeListFragment) getSupportFragmentManager().findFragmentByTag("android:switcher:"+R.id.viewpager+":0");
         //"android:switcher:"+R.id.viewpager+":0" returns current fragment

  if(fragment != null)  // could be null if not instantiated yet
  {
     if(fragment.getView() != null) 
     {

        ViewPager.LayoutParams params = (ViewPager.LayoutParams) group.getLayoutParams();
        params.setLayoutDirection(0x00000001);

     }
  }

notice that 0x00000001 is const value for rtl refer to here

Payam Asefi
  • 2,677
  • 2
  • 15
  • 26
  • Hi parham , Thanks for your Answer but , i Think this method http://stackoverflow.com/questions/13489723/how-to-reverse-the-direction-of-viewpager-to-left-to-right-order is better than , your solution , but i can't implement that – kiana rahimi Dec 14 '15 at 13:36
  • @kianarahimi I'm not sure but if you want to set tab 3 as start then simply after defining ViewPager add `viewPager.setCurrentItem(R.layout.tab3);` – Payam Asefi Dec 14 '15 at 14:20
  • mamnoon payam jan dorost shod – kiana rahimi Dec 14 '15 at 15:51
  • khahesh mikonam.pas agar momkene in post ro be onvane javab entekhab kon – Payam Asefi Dec 14 '15 at 16:06
0

this solution is little tricky but , this is the best answer for this question

first of all , we need to access to getCount() of PagerAdapter.java

for this in the mainActivity.java and in the onCreate() after the defining the Instance of PagerAdapter and setting the PagerAdapter on ViewPager ( this is important write exactly after the setting the adapter) we write :

iViewPager.setCurrentItem(viewPagerAdapter.getCount());

so in my code , MainActivity be like this :

package com.example.imajid.grid2.activities;

import android.support.design.widget.NavigationView;
import android.support.design.widget.TabLayout;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

import com.example.imajid.grid2.R;
import com.example.imajid.grid2.adapters.PagerAdapter;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private DrawerLayout mDrawerLayout;


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


        //----------------------- set toolbar
        Toolbar iToolbar = (Toolbar) findViewById(R.id.xmlToolbar);
        setSupportActionBar(iToolbar);


        //------------------------------ initialize toolbar
        ActionBar actionBar = getSupportActionBar();
        actionBar.setHomeAsUpIndicator(R.drawable.menu);
        actionBar.setDisplayHomeAsUpEnabled(true);

        //****************************  find tablayout *****************************//
        TabLayout iTabLayout = (TabLayout) findViewById(R.id.xmlTabLayout);
        iTabLayout.addTab(iTabLayout.newTab());
        iTabLayout.addTab(iTabLayout.newTab());
        iTabLayout.addTab(iTabLayout.newTab());

        iTabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

        //*******************************  Array list for sending titles *********************************//

        ArrayList<String> viewPagersTitle = new ArrayList<String>();

        viewPagersTitle.add("صفحه اصلی");
        viewPagersTitle.add("فیلم");
        viewPagersTitle.add("آهنگ");

        //******************************* find view pager in xml *****************************//

        ViewPager iViewPager = (ViewPager) findViewById(R.id.xmlViewPager);


        //************************************** Rtlizer view pager ************************************


        //**************************************  find adapter for view pager *******************************//

        PagerAdapter viewPagerAdapter = new PagerAdapter(getSupportFragmentManager() , iTabLayout.getTabCount() , viewPagersTitle);

        //************************************  set adapter for view pager *******************************//
        iViewPager.setAdapter(viewPagerAdapter);

        iViewPager.setCurrentItem(viewPagerAdapter.getCount());

        //***********************************  setup tablayout to view pager********************************//
        iTabLayout.setupWithViewPager(iViewPager);




        mDrawerLayout = (DrawerLayout) findViewById(R.id.xmlDrawerLayoutRoot);


        //-------------------------------------- find navigation view
        NavigationView navigationView = (NavigationView)findViewById(R.id.xmlNavigation);
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {
                menuItem.setChecked(true);
                mDrawerLayout.closeDrawers();
                Toast.makeText(MainActivity.this , menuItem.getTitle() , Toast.LENGTH_SHORT).show();
                return true;
            }
        });


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return true;

    }


    //onoptionItemSelected
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int itemId = item.getItemId();
        String btnName = null;

        switch (itemId){
            case android.R.id.home:
                mDrawerLayout.openDrawer(GravityCompat.START);
                return  true;

            case R.id.menu_setting:
                btnName = "Setting";
                break;
            case R.id.menu_compass:
                btnName = "Compass";
                break;
            case R.id.menu_help:
                btnName = "Help";
                break;

        }

        Toast.makeText(MainActivity.this , "You clicked at " + btnName , Toast.LENGTH_SHORT).show();
        return true;
    }

}
kiana rahimi
  • 246
  • 4
  • 16