2016-03-24 15 views
-1

Der SetOnclick Listener, den ich in der onCreate-Methode geschrieben habe, funktioniert nicht. Der Fehler ist ein Nullzeiger Ausnahmefehler für Schaltfläche b1. Ich habe versucht, b1 vor der onclick-Methode zu initialisieren, aber es funktioniert auch nicht. Für diesen Code habe ich das Android Studio Beispiel "TAbbed Activity" verwendet. Dann suche ich eine Möglichkeit, die onClickListener-Methode in einer Aktivität mit Registerkarten zu verwenden. Bitte erzählen Sie mir einige Lösungen. DankonClickListener funktioniert nicht in Registerkartenaktivität Android

public class MainActivity extends AppCompatActivity { 

     public static Button b1,b2; 
     private SectionsPagerAdapter mSectionsPagerAdapter; 
     private ViewPager mViewPager; 

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

      mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

      mViewPager = (ViewPager) findViewById(R.id.container); 
      mViewPager.setAdapter(mSectionsPagerAdapter); 


      // THIS DOESNT RUN AND IT MAKES THE APP CRASH 
      b1.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        b1.setText("test"); 
       } 
      }); 

     } 

     public static class PlaceholderFragment extends Fragment { 

      private static final String ARG_SECTION_NUMBER = "section_number"; 
      public PlaceholderFragment() {} 

      public static PlaceholderFragment newInstance(int sectionNumber) { 
       PlaceholderFragment fragment = new PlaceholderFragment(); 
       Bundle args = new Bundle(); 
       args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
       fragment.setArguments(args); 
       return fragment; 
      } 

      public void newImageView(int sectionNumber, Button img, int n){ 
       if(sectionNumber == n) 
        img.setVisibility(View.VISIBLE); 
       else 
        img.setVisibility(View.INVISIBLE); 
      } 

      @Override 
      public View onCreateView(LayoutInflater inflater, ViewGroup container, 
            Bundle savedInstanceState) { 
       View rootView = inflater.inflate(R.layout.fragment_main, container, false); 

       b1=(Button)rootView.findViewById(R.id.b1); 
       newImageView(getArguments().getInt(ARG_SECTION_NUMBER),b1,1); 

       b2=(Button) rootView.findViewById(R.id.b2); 
       newImageView(getArguments().getInt(ARG_SECTION_NUMBER),b2,2); 

       return rootView; 
      } 
     } 

     public class SectionsPagerAdapter extends FragmentPagerAdapter { 

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

      @Override 
      public Fragment getItem(int position) { 
       return PlaceholderFragment.newInstance(position + 1); 
      } 

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

      @Override 
      public CharSequence getPageTitle(int position) { 
       switch (position) { 
        case 0: 
         return "SECTION 1"; 
        case 1: 
         return "SECTION 2"; 
       } 
       return null; 
      } 
     } 
    }`enter code here 
+0

Mögliches Duplikat von [Was ist eine Nullzeigerausnahme und wie behebe ich sie?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) – Selvin

+0

erste 'öffentliche statische Taste b1, b2;' ernst? wirklich schlechte Idee .... jetzt fügen Sie 'Log.d (" - "," kurz vor b1.setOnClickListener ");' und 'Log.d (" - "," direkt nach b1 = (Button) rootView "); '... jetzt das Logcat Log ansehen, um zu sehen, was zuerst kommt – Selvin

Antwort

0

das Setzen vor OnClickListener Einstellung

b1=(Button)rootView.findViewById(R.id.b1); 

oder eingestellt Zuhörer, nachdem Sie ID zugewiesen haben. Sie sollten einer Schaltfläche eine ID zuweisen, bevor Sie mit dem Klicken beginnen. Wie soll android sonst herausfinden, welcher Knopf b1 ist?

+0

Ich kann rootView in der onCreate Methode nicht benutzen und wenn ich setOnclickListener danach anrufe habe ich die ID zugewiesen, es funktioniert sowieso nicht. Ich habe es schon versucht. –

0

Diese Taste ist wahrscheinlich in Ihrem Fragmente XML (R.layout.fragment_main), so sollten Sie diese onClickListener() im onCreateView() Ihre PlaceholderFragment nach b1=(Button)rootView.findViewById(R.id.b1); hinzufügen.

In jedem Fall können Sie eine onClickListener() in einem Objekt definieren, das nicht zuerst definiert ist. Sie müssen diese Ansicht normalerweise zuerst anhand des ID-Attributs aus dem XML mit b1=(Button)rootView.findViewById(R.id.b1); suchen oder mit einem Konstruktor erstellen, z. b1= new Button(); (in Ihrem Fall nicht geeignet).

+0

Ich kann rootView nicht in der onCreate-Methode verwenden und wenn ich setOnclickListener danach aufrufen, hatte ich die ID in das PlaceholderFragment zugewiesen, es funktioniert sowieso nicht. Ich habe es schon versucht. –

Verwandte Themen