2014-04-23 2 views
1

Вот эта библиотека: https://github.com/astuetz/PagerSlidingTabStrip Я пытаюсь ее реализовать, но мое приложение продолжает сбой при запуске. Я попытался понять пример приложения, которое опубликовано, но не думаю, что я делаю что-то правильно. Вот мой код:Может ли кто-нибудь показать мне простую рабочую реализацию PagerSlidingTabStrip?

MainActivity.java

 

    import android.graphics.Color; 
    import android.graphics.drawable.ColorDrawable; 
    import android.graphics.drawable.Drawable; 
    import android.graphics.drawable.LayerDrawable; 
    import android.graphics.drawable.TransitionDrawable; 
    import android.os.Build; 
    import android.os.Bundle; 
    import android.os.Handler; 
    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.util.TypedValue; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.View; 

    import com.astuetz.PagerSlidingTabStrip; 


    public class MainActivity extends FragmentActivity { 

     private final Handler handler = new Handler(); 

     private PagerSlidingTabStrip tabs; 
     private ViewPager pager; 
     private MyPagerAdapter adapter; 

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

      tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs); 
      pager = (ViewPager) findViewById(R.id.pager); 
      adapter = new MyPagerAdapter(getSupportFragmentManager()); 

      pager.setAdapter(adapter); 

      tabs.setViewPager(pager); 
     } 


     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 

      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.main, menu); 
      return true; 
     } 

     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      // Handle action bar item clicks here. The action bar will 
      // automatically handle clicks on the Home/Up button, so long 
      // as you specify a parent activity in AndroidManifest.xml. 
      int id = item.getItemId(); 
      if (id == R.id.action_settings) { 
       return true; 
      } 
      return super.onOptionsItemSelected(item); 
     } 

     @Override 
     protected void onSaveInstanceState(Bundle outState){ 
      super.onSaveInstanceState(outState); 
     } 
     @Override 
     protected void onRestoreInstanceState(Bundle savedInstanceState){ 
      super.onRestoreInstanceState(savedInstanceState); 
     } 

     private Drawable.Callback drawableCallback = new Drawable.Callback() { 
      @Override 
      public void invalidateDrawable(Drawable who) { 
       getActionBar().setBackgroundDrawable(who); 
      } 

      @Override 
      public void scheduleDrawable(Drawable who, Runnable what, long when) { 
       handler.postAtTime(what, when); 
      } 

      @Override 
      public void unscheduleDrawable(Drawable who, Runnable what) { 
       handler.removeCallbacks(what); 
      } 
     }; 

     public class MyPagerAdapter extends FragmentPagerAdapter{ 
      private final String[] TITLES = {"T1","T2"}; 

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

      public CharSequence getPageTitle(int position){ 
       return TITLES[position]; 
      } 
      @Override 
      public Fragment getItem(int i) { 
       return null; 
      } 

      @Override 
      public int getCount() { 
       return TITLES.length; 
      } 
     } 
    } 

А вот acitivty_main.xml

<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" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context="edu.purdue.test.app.MainActivity"> 

    <com.astuetz.PagerSlidingTabStrip 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="48dip" /> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/tabs" 
     tools:context=".MainActivity" /> 


</RelativeLayout> 

ответ

1

Вы не инстанцировании любой из фрагментов, которые вы хотите стать Вкладки в методе FragmentPagerAdapter, GetItem. Вместо этого вы возвращаете null и, следовательно, нет никаких просмотров для заполнения viewpager. Я вижу, что вы проверили его образец проекта, возможно, поближе посмотрите на фрагменты, которые вы пытаетесь добавить в viewpager. Вышеприведенный ответ выглядит как реализация sounnd.

0

здесь пример, который IAM использовать прямо сейчас,

public class Formulario extends FragmentActivity implements 

    ActionBar.TabListener { 

private static final FragmentTransaction transaction = null; 
public String ambitorec; 
private ViewPager viewPager; 
private TabsPagerAdapter mAdapter; 
private ActionBar actionBar; 

// Tab titles 
private String[] tabs = { "tab 1", "tab 2", "tab 3" }; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_formulario); 
    ambitorec = getIntent().getStringExtra("ambito"); 


    // Initilization 
    viewPager = (ViewPager) findViewById(R.id.pager); 
    actionBar = getActionBar(); 
    mAdapter = new TabsPagerAdapter(getSupportFragmentManager()); 

    viewPager.setAdapter(mAdapter); 
    actionBar.setHomeButtonEnabled(false); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);   

    // Adding Tabs 
    for (String tab_name : tabs) { 
     actionBar.addTab(actionBar.newTab().setText(tab_name) 
       .setTabListener(this)); 
    } 






    /** 
    * on swiping the viewpager make respective tab selected 
    * */ 
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

     @Override 
     public void onPageSelected(int position) { 
      // on changing the page 
      // make respected tab selected 
      actionBar.setSelectedNavigationItem(position); 
     } 

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

     @Override 
     public void onPageScrollStateChanged(int arg0) { 
     } 
    }); 
} 

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

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    // on tab selected 
    // show respected fragment view 
    viewPager.setCurrentItem(tab.getPosition()); 
} 

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

также вам необходимо добавить адаптер, в этом случае:

public class TabsPagerAdapter extends FragmentPagerAdapter { 

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

@Override 
public Fragment getItem(int index) { 

    switch (index) { 
    case 0: 
     // tab 1 fragment activity 
     return new Formulario1Fragment(); 
    case 1: 
     // tab2 fragment activity 
     return new Formulario2Fragment(); 
    case 2: 
     // tab 3 fragment activity 
     return new MultimediaFragment(); 
    } 

    return null; 
} 

@Override 
public int getCount() { 
    // get item count - equal to number of tabs 
    return 3; 
} 

}

надеюсь, что это помогает, если вам нужно больше помощи Больная попытка объяснить

+0

btw, каждая вкладка его разного фрагмента, поэтому вы помещаете то, что хотите быть на каждой вкладке в каждом разном фрагменте, учебник, который я последовал за этим: http://www.androidhive.info/2013/10/андроид язычок-макет с-перелистываемого-вид-1 / – Shocklo

Смежные вопросы