2016-04-22 14 views
0

私はFragmentにviewPagerを追加しようとしています。私は自分のアプリケーションを起動したときしかし、私はこれを受け取る:フラグメントのViewPagerとTabLayout。ヌルオブジェクトリファレンスでsetAdapter

のjava.lang.NullPointerException:「無効android.support.v4.view.ViewPager.setAdapterを(仮想メソッドを呼び出そうとandroid.support.v4.view.PagerAdapter 「)nullオブジェクト参照

のマイMainFragment:

public class YourTasksFragment extends Fragment { 

@Bind(R.id.viewpager) 
ViewPager viewPager; 

@Bind(R.id.tabs) 
TabLayout tabLayout; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_your_tasks, container, false); 
    return v; 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    setupViewPager(viewPager); 
    tabLayout.setupWithViewPager(viewPager); 
} 

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager()); 
    adapter.addFragment(new OneFragment(), "ONE"); 
    adapter.addFragment(new TwoFragment(), "TWO"); 
    viewPager.setAdapter(adapter); 
} 

class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> fragmentList = new ArrayList<>(); 
    private final List<String> fragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager childFragmentManager) { 
     super(childFragmentManager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return fragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return fragmentList.size(); 
    } 

    public void addFragment(Fragment fragment, String title) { 
     fragmentList.add(fragment); 
     fragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return fragmentTitleList.get(position); 
    } 
} 
} 

レイアウト:

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

    <android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:tabMode="fixed" 
     app:tabGravity="fill"/> 

<android.support.v4.view.ViewPager 
    android:id="@+id/viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

+0

ビューページを手動でリンクし、正しいレイアウトかどうかを確認してください。 –

+0

これを参照してくださいhttp://www.gadgetsaint.com/android/create-viewpager-tabs-android/#.WPuppVN97BI – ASP

答えて

1

onCreateView()でButterknifeを設定するのを忘れたため、変数は初期化されません。

これを行います。

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_your_tasks, container, false); 
    Butterknife.bind(this,v); 
    return v; 
} 

はそれが役に立てば幸い!

+0

どのような間違いをする!私はとても盲目です:)ありがとう。問題は解決しました。 – MobileDev

1

onCreateViewメソッドでButterknife.bind(this、v)を追加するのを忘れてしまった。 ビューをバインドする必要があります。

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_your_tasks, container, false); 
    Butterknife.bind(this,v); 
    return v; 
}