2016-03-24 6 views
-1

onCreateメソッドで記述したsetOnclickリスナーは機能しません。 エラーは、ボタンb1のヌルポインター例外エラーです。私はonclickメソッドの前にb1を初期化しようとしましたが、どちらもうまくいきません。 このコードでは、Androidスタジオの例「TAbbed Activity」を使用しました。 次に、タブ付きアクティビティでonClickListenerメソッドを使用する方法を探しています。 解決策を教えてください。おかげonClickListenerはタブ付きアクティビティでは機能しません。

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ポインタの例外とは何か、それを修正する方法は?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) – Selvin

+0

最初の 'public static Button b1、b2;'真剣に?本当に悪いアイデア....今すぐ 'Log.d(" - "、" b1.setOnClickListener ");'と 'Log.d(" - "b1 =(Button)rootViewの直後に" ); '...最初に来るものを見るためにlogcatログを見る – Selvin

答えて

0

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

か、IDを割り当てた後でリスナーを設定しonClickListener設定する前にこれを入れてください。 クリックを処理する前に、ボタンにIDを割り当てる必要があります。それ以外の場合、どのボタンがb1であるかをアンドロイドがどのように把握しているのでしょうか?ボタンはあなたのフラグメントのXML(R.layout.fragment_main)である可能性がありますので、b1=(Button)rootView.findViewById(R.id.b1);後にPlaceholderFragmentonCreateView()にそのonClickListener()を追加する必要があり

+0

onCreateメソッドでrootViewを使うことはできません。そして、私がidを割り当てた後にsetOnclickListenerを呼び出すと、とにかく動作しません。私はすでに試しました。 –

0

いずれにしても、最初に定義されていないオブジェクトではonClickListener()を定義できません。最初に、そのビューをXMLからのid属性(通常b1=(Button)rootView.findViewById(R.id.b1);)で見つけるか、コンストラクタを使用してビューを作成する必要があります。 b1= new Button();(あなたの場合は適切ではありません)。

+0

onCreateメソッドでrootViewを使用することはできません。そのあとでsetOnclickListenerを呼び出すと、PlaceholderFragmentにidを割り当てても、それは動作しません。私はすでに試しました。 –