2012-01-20 3 views
0

У меня есть исключение Nullpointer с этим кодом, он работал явно раньше. Exception показывает на mainLayout.setOnTouchListener (это), но я не понимаю, почему. Измененный код в другой деятельности .:Nullpointer Exception setOnTouchListener (this)

public class Assistantbuilder extends Activity implements OnTouchListener 
{ 
    private ViewFlipper flipper = null; 
    private float fromPosition; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.main); 

     LinearLayout mainLayout = (LinearLayout) findViewById(R.id.main_layout); 
     mainLayout.setOnTouchListener(this); 

     flipper = (ViewFlipper) findViewById(R.id.flipper); 

     LayoutInflater inflater = (LayoutInflater)   getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     int layouts[] = new int[]{ R.layout.dashboard_layout, R.layout.dashboard_layout2, R.layout.dashboard_layout3, R.layout.dashboard_layout4 }; 
     for (int layout : layouts) 
      flipper.addView(inflater.inflate(layout, null)); 

     Button btndimensions_rafters = (Button) findViewById(R.id.home_btn_dimensions_rafters); 
     btndimensions_rafters.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 
       switch (arg0.getId()) { 
       case R.id.home_btn_dimensions_rafters: 
        Intent i = new Intent(Assistantbuilder.this, 
          dimensions_rafters.class); 
        startActivity(i); 
        break; 
       } 
      } 
     }); 
     Button btngable_roof = (Button) findViewById(R.id.home_btn_gable_roof); 
     btngable_roof.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 
       switch (arg0.getId()) { 
       case R.id.home_btn_gable_roof: 
        Intent i = new Intent(Assistantbuilder.this, 
          GableRoof.class); 
        startActivity(i); 
        break; 
       } 
      } 
     }); 

    } 

Может быть здесь какая-то ошибка:

public boolean onTouch(View view, MotionEvent event) 
    { 
     switch (event.getAction()) 
     { 
     case MotionEvent.ACTION_DOWN: 
      fromPosition = event.getX(); 
      break; 
     case MotionEvent.ACTION_UP: 
      float toPosition = event.getX(); 
      if (fromPosition > toPosition) 
      { 
       flipper.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.go_next_in)); 
       flipper.setOutAnimation(AnimationUtils.loadAnimation(this,R.anim.go_next_out)); 
       flipper.showNext(); 
      } 
      else if (fromPosition < toPosition) 
      { 
       flipper.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.go_prev_in)); 
       flipper.setOutAnimation(AnimationUtils.loadAnimation(this,R.anim.go_prev_out)); 
       flipper.showPrevious(); 
      } 
     default: 
      break; 
     } 
     return true; 
    } 
} 

Большое спасибо.

+0

Как вы думаете, не добавляя свое исключение, каждый может знать, куда он идет, добавить несколько журналов. – AAnkit

ответ

1

Ну, учитывая, что эта линия находится в onCreate вашей деятельности, this всегда должна быть действительной, поэтому единственной вещью, которая может быть равна нулю, является mainLayout. Вы изменили файл макета XML? Время выполнения не может найти LinearLayout с идентификатором main_layout.