2016-03-24 17 views
-1

'da çalışmaz. OnCreate yönteminde yazdığım setOnclick Dinleyicisi çalışmaz. Hata, b1 düğmesi için boş bir işaretçi istisnası hatasıdır. Onclick yönteminden önce b1'i başlatmayı denedim ama işe yaramıyor. Bu kod için Android Studio Örneği "Takas Etkinliği" ni kullandım. Ardından, sekmeli bir etkinlikte onClickListener yöntemini kullanmanın bir yolunu arıyorum. Lütfen bana bazı çözümler söyle. TeşekküronClickListener, Sekmeli Etkinlik 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

[Null Pointer Exception nedir ve bunu nasıl düzeltebilirim?] 'In olası kopyası (http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) – Selvin

+0

İlk 'genel statik Düğme b1, b2;' cidden? gerçekten kötü bir fikir .... şimdi ekleyin "Log.d (" - "," hemen hemen b1.setOnClickListener ");' ve 'Log.d (" - "," hemen sonra b1 = (Düğme) rootView "); '... şimdi ilk ne geliyor görmek için logcat günlüğünü izlemek – Selvin

cevap

0

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

OnClickListener ayarlamadan önce koy veya id atamış sonra dinleyici ayarlayın. Tıklatmadan önce bir düğmeye bir kimlik atamalısınız. Aksi takdirde, android, hangi düğmenin b1 olduğunu anlamaya çalışmaktadır.

+0

Ben onCreate yönteminde rootView kullanamazsınız ve ID atadı sonra setOnclickListener çağırırsanız, zaten işe yaramıyor. Çoktan denedim. –

0

düğmesi veridiliminin XML (R.layout.fragment_main) 'de muhtemelen bu yüzden b1=(Button)rootView.findViewById(R.id.b1); sonra senin PlaceholderFragment arasında onCreateView() o onClickListener() eklemek gerektiğini.

Her durumda, önce tanımlanmamış bir nesnede onClickListener() tanımlayamazsınız. Öncelikle bu görünümü genellikle XML'den b1=(Button)rootView.findViewById(R.id.b1); ile id özniteliğinden bulmanız ya da örneğin bir kurucu kullanarak bir tane oluşturmanız gerekir. b1= new Button(); (sizin durumunuza uygun değildir).

+0

rootView'i onCreate yönteminde kullanamıyorum ve ID'yi PlaceholderFragment'e atadıktan sonra setOnclickListener'ı çağırırsam, yine de işe yaramıyor. Çoktan denedim. –