0

Meine App enthält Navigationsschublade. Und darin gibt es ein Elementfragment. In diesem Fragment habe ich versucht, drei Klickereignisse zu implementieren, um 3 Aktivitäten zu öffnen. Aber wenn ich auf das Fragment aus der Navigationsleiste klicke, stürzt die App mit nullPointerAcception ab. Nach dem Debug gibt es Probleme mit dem folgenden Code, der onClickListener enthält:App stürzt nach dem Klicken auf die Schaltfläche Implementierung in Fragmenten

itemButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent itemIntent=new Intent(getActivity(),ItemsActivity.class); 
       startActivity(itemIntent); 
      } 
     }); 

Hier ist mein Fragment-Code.

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class ItemsFragment extends Fragment { 

    Button itemButton; 
    Button categoryButton; 
    Button discountButton; 

    public ItemsFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 


     itemButton=(Button) container.findViewById(R.id.items_button); 
     categoryButton=(Button) container.findViewById(R.id.category_button); 
     discountButton=(Button) container.findViewById(R.id.discount_button); 

     itemButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent itemIntent=new Intent(getActivity(),ItemsActivity.class); 
       startActivity(itemIntent); 
      } 
     }); 

     setHasOptionsMenu(false); 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_items, container, false); 
    } 

} 

// Der Logcat Fehler

E/AndroidRuntime: FATAL EXCEPTION: main 
        java.lang.NullPointerException 
         at com.soumya.possystem.ItemsFragment.onCreateView(ItemsFragment.java:36) 
         at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080) 
         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108) 
         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290) 
         at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801) 
         at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677) 
         at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:536) 
         at android.os.Handler.handleCallback(Handler.java:725) 
         at android.os.Handler.dispatchMessage(Handler.java:92) 
         at android.os.Looper.loop(Looper.java:137) 
         at android.app.ActivityThread.main(ActivityThread.java:5041) 
         at java.lang.reflect.Method.invokeNative(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:511) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
         at dalvik.system.NativeStart.main(Native Method) 
+0

was Ausnahme ist? –

+0

Bitte senden Sie die Ausnahme stacktrace von logcat. –

+0

Mögliches Duplikat von [Leider ist MyApp gestoppt. Wie kann ich das lösen?] (Http://stackoverflow.com/questions/23353173/universe-myapp-has-stopped-how-cani--solve-this) –

Antwort

4

Vor Ansicht Aufblasen und erstellt Ansicht Sie versuchen, Instanz der controls.and Rückkehr aufgeblasen Ansicht zu finden in onCreateView

Ein anderer Weg ist zu nehmen die Instanz (findviewById) in onViewCreated oder onActivityCreated

Zweite Ausgabe, die Sie versuchen Um das Objekt der Kontrolle von container zu erhalten, müssen Sie aus der aufgeblähten Ansicht herausnehmen.

View v=inflater.inflate(R.layout.fragment_items, container, false); 

Im Folgenden habe ich Code mit Änderungen beibehalten.

import android.content.Intent; 
    import android.os.Bundle; 
    import android.support.v4.app.Fragment; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.Button; 


    /** 
    * A simple {@link Fragment} subclass. 
    */ 
    public class ItemsFragment extends Fragment { 

     Button itemButton; 
     Button categoryButton; 
     Button discountButton; 

     public ItemsFragment() { 
      // Required empty public constructor 
     } 


     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
    View v=inflater.inflate(R.layout.fragment_items, container, false); 
    //check in place of container here you need to use inflated view (`v`) instance 
      itemButton=(Button) v.findViewById(R.id.items_button); 
      categoryButton=(Button) v.findViewById(R.id.category_button); 
      discountButton=(Button) v.findViewById(R.id.discount_button); 

      itemButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent itemIntent=new Intent(getActivity(),ItemsActivity.class); 
        startActivity(itemIntent); 
       } 
      }); 

      setHasOptionsMenu(false); 
      // Inflate the layout for this fragment 
      return v; 
     } 

    } 
+0

können Sie bestimmten Code angeben, wo es nicht funktioniert –

+0

@jiteshmohite Bitte überprüfen Sie den Code und Kommentar Ich habe wo genau NullPointerException Absturz – user1140237

+0

okey jetzt haben Sie bearbeitet, danke –

1

Sie haben Ansicht zu initialisieren je nach Anforderung:
Create a Fragment Class

So Sie
View view = inflater.inflate(R.layout.YOUR_LAYOUT, container, false);
und dann
itemButton=(Button) view.findViewById(R.id.items_button);

0

Versuchen Sie, diese

View rootView = inflater.inflate(R.layout.fragment_id, container, false); 
    itemButton=(Button) container.findViewById(R.id.items_button); 
    categoryButton=(Button) container.findViewById(R.id.category_button); 
    discountButton=(Button) container.findViewById(R.id.discount_button); 
. 
. 
. 

    return rootView; 
zu tun haben
0

Versuchen Sie folgendes:

public class ItemsFragment extends Fragment { 

Button itemButton; 
Button categoryButton; 
Button discountButton; 

public ItemsFragment() { 
    // Required empty public constructor 
} 


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

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    itemButton=(Button) view.findViewById(R.id.items_button); 
    categoryButton=(Button) view.findViewById(R.id.category_button); 
    discountButton=(Button) view.findViewById(R.id.discount_button); 

    itemButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent itemIntent=new Intent(getActivity(),ItemsActivity.class); 
      startActivity(itemIntent); 
     } 
    }); 

} 
} 
1
public class ItemsFragment extends Fragment { 

    Button itemButton; 
    Button categoryButton; 
    Button discountButton; 

    public ItemsFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
    /** Inflate rootView of fragment **/ 
    View rootView = inflater.inflate(R.layout.fragment_items, container, false); 

     //replace "container" with "rootView" **/ 
     itemButton=(Button) rootView.findViewById(R.id.items_button); 
     categoryButton=(Button) rootView.findViewById(R.id.category_button); 
     discountButton=(Button) rootView.findViewById(R.id.discount_button); 

     itemButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent itemIntent=new Intent(getActivity(),ItemsActivity.class); 
       startActivity(itemIntent); 
      } 
     }); 

     setHasOptionsMenu(false); 
     // Inflate the layout for this fragment 
     return rootView; // Return the view object you inflated 
    } 

} 
+0

Ich schlage vor, Sie für das Problem zu erklären. So kann der Benutzer das Problem verstehen – user1140237

Verwandte Themen