2015-09-22 3 views
0

Я пытаюсь реализовать ViewPager новым способом с помощью библиотеки PagerSlidingTabStrip. Я думаю, что код в порядке, но я получаю сообщение об ошибке, когда пытаюсь установить адаптер в ViewPager. Мой код работал нормально, прежде чем я начал использовать PagerSlidingTabStrip, но этот код теперь устарел.ViewPager setAdapter = NullPointerException

Ошибка:

java.lang.RuntimeException: Unable to start activity 
ComponentInfo{com.adrissa.klea/com.adrissa.klea.MainActivity}: 
java.lang.NullPointerException Caused by: 
java.lang.NullPointerException at 
com.adrissa.klea.MainActivity.onInt(MainActivity.java:103) at 
br.liveo.navigationliveo.NavigationLiveo.mountListNavigation(NavigationLiveo.java:248) 
at 
br.liveo.navigationliveo.NavigationLiveo.onCreate(NavigationLiveo.java:104) 
at android.app.Activity.performCreate(Activity.java:5451) 

Это реализация ViewPager:

public class MainActivity extends NavigationLiveo implements 
     br.liveo.interfaces.OnItemClickListener, NavigationDrawerFragment.NavigationDrawerCallbacks, 
     ActionBar.TabListener { 

    /** 
    * Fragment managing the behaviors, interactions and presentation of the 
    * navigation drawer. 
    */ 
    private HelpLiveo mLiveo; 
    ViewPager mViewPager; 
    FragmentPagerAdapter mSectionsPagerAdapter; 
    String category; 
    public static ArrayList<String> categoriesForSellClass = new ArrayList<String>(); 

    /** 
    * Used to store the last screen title. For use in 
    * {@link #restoreActionBar()}. 
    */ 
    private CharSequence mTitle; 

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

     //user information NavDrawer 
     this.userName.setText("Name"); 
     this.userEmail.setText("Email"); 
     this.userPhoto.setImageResource(R.drawable.selfie); 
     this.userBackground.setImageResource(R.drawable.nav_drawer_bg); 

     //setup navigation drawer 
     mLiveo = new HelpLiveo(); 
     mLiveo.add(getString(R.string.home), R.drawable.home); 
     mLiveo.add(getString(R.string.my_adverts), R.drawable.price); 
     mLiveo.add(getString(R.string.messages), R.drawable.envelope); 
     mLiveo.addSeparator(); 
     mLiveo.add(getString(R.string.settings), R.drawable.settings); 
     mLiveo.add(getString(R.string.log_out), R.drawable.power); 

     with(this, Navigation.THEME_LIGHT).startingPosition(0) 
      .addAllHelpItem(mLiveo.getHelp()) 
      .setOnClickUser(onClickPhoto) 
      .setOnPrepareOptionsMenu(onPrepare) 
      .build(); 

     mTitle = getTitle(); 

     mSectionsPagerAdapter = new MyPagerAdapter(
      getSupportFragmentManager()); 
     final ActionBar actionBar = getSupportActionBar(); 
     //actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     // Set up the ViewPager with the sections adapter. 
     mViewPager = (ViewPager) findViewById(R.id.pager); 

     //here is line 103 \/ 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs); 
     tabs.setViewPager(mViewPager); 

     // When swiping between different sections, select the corresponding 
     // tab. We can also use ActionBar.Tab#select() to do this if we have 
     // a reference to the Tab. 
     tabs 
      .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
       @Override 
       public void onPageSelected(int position) { 
        actionBar.setSelectedNavigationItem(position); 
       } 
      }); 

     mViewPager.requestTransparentRegion(mViewPager); 

     ParseQuery<ParseObject> query = ParseQuery.getQuery("Categories"); 
     query.findInBackground(new FindCallback<ParseObject>() { 
     @SuppressLint("NewApi") 
     public void done(List<ParseObject> objects, ParseException e) { 
      if (e == null) { 
       categoriesForSellClass.add("Alle"); 
       categoriesForSellClass.add("Favoritter"); 
       for (int i = 0; i < objects.size(); i++) { 
        ParseObject pObject = objects.get(i); 
        category = pObject.getString("name"); 
        categoriesForSellClass.add(category); 

       } 
       // onSucced(objects); 
      } else { 

      } 
     } 
     }); 
    } 

    @Override 
    public void onNavigationDrawerItemSelected(int position) { 
     // update the main content by replacing fragments 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction() 
      .replace(R.id.container, AllFragment.newInstance(position + 1)) 
      .commit(); 
    } 

    private View.OnClickListener onClickPhoto = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     Toast.makeText(getApplicationContext(), "onClickPhoto :D", Toast.LENGTH_SHORT).show(); 
     closeDrawer(); 
     } 
    }; 

    private OnPrepareOptionsMenuLiveo onPrepare = new OnPrepareOptionsMenuLiveo() { 
     @Override 
     public void onPrepareOptionsMenu(Menu menu, int position, boolean visible) { 
     } 
    }; 

    public void onSectionAttached(int number) { 

     switch (number) { 
     case 1: 
     mTitle = getString(R.string.title_section1); 
     break; 
     case 2: 
     mTitle = getString(R.string.title_section2); 
     break; 
     case 3: 
     mTitle = getString(R.string.title_section3); 
     break; 
     } 
    } 

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

    @Override 
    public void onItemClick(int position) { 
     Fragment mFragment; 
     FragmentManager mFragmentManager = getSupportFragmentManager(); 
     mFragment = null; 

     switch (position){ 
     case 2: 
      //mFragment = new ViewPagerFragment(); 
      break; 

     default: 
      //mFragment = MainFragment.newInstance(mHelpLiveo.get(position).getName()); 
      break; 
     } 

     if (mFragment != null){ 
     mFragmentManager.beginTransaction().replace(R.id.container, mFragment).commit(); 
     } 
    } 

PagerAdapter класс:

public class MyPagerAdapter extends FragmentPagerAdapter implements PagerSlidingTabStrip.IconTabProvider{ 

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

    @Override 
    public int getCount() { 
     // Show 5 total pages. 
     return 5; 
    } 

    final int[] ICONS = new int[] { 
     R.drawable.ic_action_camera, 
     R.drawable.ic_action_person, 
     R.drawable.ic_action_important, 
     R.drawable.ic_action_time, 
     R.drawable.ic_action_map 
    }; 

    @Override 
    public Fragment getItem(int i) { 
     switch (i) { 
     case 0: 
      return new AllFragment(); 
     case 1: 
      return new ProfileFragment(); 
     case 2: 
      return new ThirdFragment(); 
     case 3: 
      return new ProfileFragment(); 
     case 4: 
      return new MapFragment().newInstance(new LatLng(55.7200, 
        10.5700)); 
     } 
     return null; 
    } 

    @Override 
    public int getPageIconResId(int i) { 
     return ICONS[i]; 
    } 
} 

main_activity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 


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

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

</RelativeLayout> 

Любая помощь приветствуется!

+1

Вы уверены, что используете один и тот же xml-файл? я вижу 'setContentView (R.layout.activity_main);' и вы отправляете 'main_activity.xml', а не тот же файл. Возможно, поэтому 'findViewById (R.id.tabs);' возвращает нулевой объект, потому что в 'activity_main.xml' нет объекта с id =' tabs'. – Rami

+1

Что такое onInt? – Blackbelt

+0

onInt - метод onCreate библиотеки Nliveo, который я использую для создания настраиваемого навигатора. –

ответ

0

Похоже, вы изменили название OnCreate (Bundle арг) в onInt():

@Override 
    public void onInt(Bundle savedInstanceState) { 
     //super.onCreate(savedInstanceState); 

Изменить имя метода обратно в OnCreate().

+0

Он должен быть onInt для того, чтобы библиотека Nliveo работала, я думаю? –

+0

Не знаю, о чем вы говорите. Невозможно представить библиотеку, вынуждающую вас изменить подпись метода обратного вызова. Должно быть onCreate –

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