0

Ich habe eine Nullpointer-Ausnahme mit meinem Adapter in das Fragment ich benutze die Gridview. Wenn die App des Funkrufempfänger lädt das Fragment in die Registerkarte beginnen aber der Adapter sendet null und die App stopptProbleme mit Gridview in Fragment

Hier kann u meinen mainactivity sehen:

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); 
} 
} 

Hier u meine Seite Adapter sehen:

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; 
} 
} 

Dies ist der XML des Fragments:

<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" /> 

Und hier u mein Fragment sehen:

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 


} 

Antwort

2

In folgenden Code in onCreateView Methode und entfernen Code aus onCreate Methode

@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

Vielen Dank, es hat funktioniert. – Mihawk

+0

Willkommen immer .. – mdDroid

2

lädt ein Fragment sein Layout in onCreateView und das Laden beendet ist wenn es onViewCreated aufruft.

Sie müssen Ihre Layouts in einem von ihnen finden, die auf den aufgeblasenen View verweisen. Zurzeit sucht Android nach Ihrem GridView in Ihrem MainActivity und gibt null zurück, da es keinen GridView gibt.

//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); 
Verwandte Themen