0

フラグメント内にアダプタを使用してnullpointer例外が発生しました。グリッドビューを使用しています。アプリを起動するとページャは、タブにフラグメントをロードしますが、アダプターは、ヌル送信し、アプリがここフラグメント内のグリッドビューに関する問題

を停止uは私のmainactivity見ることができます:

:uは私のページアダプターを見ることができます。ここ

public class MainLayout extends AppCompatActivity { 
ViewPager pager; 
TabLayout tabLayout; 

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

    pager = (ViewPager) findViewById(R.id.view_pager); 
    tabLayout = (TabLayout) findViewById(R.id.tab_layout); 

    // Fragment manager to add fragment in viewpager we will pass object of Fragment manager to adpater class. 
    FragmentManager manager = getSupportFragmentManager(); 

    //object of com.example.babus.konektamos.PagerAdapter passing fragment manager object as a parameter of constructor of com.example.babus.konektamos.PagerAdapter class. 
    PagerAdapter adapter = new PagerAdapter(manager); 

    //set Adapter to view pager 
    pager.setAdapter(adapter); 

    //set tablayout with viewpager 
    tabLayout.setupWithViewPager(pager); 

    // adding functionality to tab and viewpager to manage each other when a page is changed or when a tab is selected 
    pager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 

    //Setting tabs from adpater 
    tabLayout.setTabsFromPagerAdapter(adapter); 

} 


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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch (item.getItemId()) { 
     case R.id.tuto: 
      Intent i = new Intent(MainLayout.this, Tutorial.class); 
      finish(); 
      startActivity(i); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 

} 
//final menu 







//modificamos el boton atras para que no nos devuelva al wizzard 
@Override 
public void onBackPressed(){ 

    finish(); 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} 
} 

public class PagerAdapter extends FragmentStatePagerAdapter { 
public PagerAdapter(FragmentManager fm) { 
    super(fm); 
} 
@Override 
public Fragment getItem(int position) { 

    Fragment frag = null; 
    switch (position){ 
     case 0: 
      frag = new OfertasFragment(); 
      break; 
     case 1: 
      frag = new NegociosFragment(); 
      break; 
     case 2: 
      frag = new TarjetaFragment(); 
      break; 
    } 
    return frag; 
} 

@Override 
public int getCount() { 
    return 3; 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    String title = " "; 
    switch (position){ 
     case 0: 
      title = "Ofertas"; 
      break; 
     case 1: 
      title = "Negocios"; 
      break; 
     case 2: 
      title = "Tarjeta"; 
      break; 
    } 

    return title; 
} 
} 

これはフラグメントの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" 
tools:context="com.example.babus.konektamos.OfertasFragment"> 

<!-- TODO: Update blank fragment layout --> 
<GridView 
    android:id="@+id/grid" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:columnWidth="120dp" 
    android:horizontalSpacing="@dimen/espacio_grilla" 
    android:numColumns="2" 
    android:padding="@dimen/espacio_grilla" 
    android:verticalSpacing="@dimen/espacio_grilla" /> 

そしてここでuが私の断片を見ることができます:

public class OfertasFragment extends Fragment implements AdapterView.OnItemClickListener{ 
private GridView gridView; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //inicio gridview 
    gridView = (GridView) this.getActivity().findViewById(R.id.grid); 
    gridView.setAdapter(new AdaptadorDeCupones(this.getActivity())); 
    gridView.setOnItemClickListener(this); 
    //fin gridview 
} 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_ofertas,container,false); 
    return view; 
} 
@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
} 




//Inicio detalle cupones 
//@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    cupones item = (cupones) parent.getItemAtPosition(position); 

    Intent intent = new Intent(this.getActivity(), ActividadDetalle.class); 
    intent.putExtra(ActividadDetalle.EXTRA_PARAM_ID, item.getId()); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 

     ActivityOptionsCompat activityOptions = 
       ActivityOptionsCompat.makeSceneTransitionAnimation(
         this.getActivity(), 
         new Pair<View, String>(view.findViewById(R.id.imagen_cupon), 
           ActividadDetalle.VIEW_NAME_HEADER_IMAGE) 
       ); 

     ActivityCompat.startActivity(this.getActivity(), intent, activityOptions.toBundle()); 
    } else 
     startActivity(intent); 
} 
//final detalle cupones 


} 

答えて

2

は、あなたのonCreateViewメソッドに次のコードを追加し、onCreate方法

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) { 
// Inflate the layout for this fragment 
View view = inflater.inflate(R.layout.fragment_ofertas,container,false); 

//inicio gridview 
gridView = (GridView) view.findViewById(R.id.grid); 
gridView.setAdapter(new AdaptadorDeCupones(this.getActivity())); 
gridView.setOnItemClickListener(this); 
return view; 
} 
+0

ありがとうございました。 – Mihawk

+0

ようこそ。 – mdDroid

2

フラグメントからコードを削除onCreateViewでそのレイアウトをロードし、ロードが完了していますonViewCreatedと呼びます。

あなたのレイアウトは、いずれか1つで、膨張したViewを参照する必要があります。現在、アンドロイドはMainActivityGridViewを探し、GridViewがないためnullを返します。

//view is your inflated view in onCreateView or the view passed in onViewCreated 
gridView = (GridView) view.findViewById(R.id.grid); 
gridView.setAdapter(new AdaptadorDeCupones(this.getActivity())); 
gridView.setOnItemClickListener(this); 
関連する問題