2012-04-12 2 views
1

Так что я действительно путают я с View (R.layout.main), который включает в себя пользовательский вид (холст)Android OnClick работает только один раз

это View содержит кнопку, которая накладывается поверх холста , но когда я нажимаю на кнопку OnClicklistener запускает событие, но после этой кнопки ничего не делает при нажатии

активность:

public class RunActivity extends Activity implements OnTouchListener, OnClickListener { 

    static int width; 
    static int height; 

    static boolean reset=false; 

    //draw d; 
    View d; 

    Button jump_button; 

    //jump 
    float last_touchpos=0; 
    static boolean jump=false; 

    private static Context mContext; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //d = new draw(this); 
     d = getLayoutInflater().inflate(R.layout.main, null); 
     d.setOnTouchListener(this); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
           WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     mContext = this; 

     //get screen size 
     WindowManager wm = (WindowManager) this.getContext().getSystemService(Context.WINDOW_SERVICE); 
     Display display = wm.getDefaultDisplay(); 

     width = display.getWidth(); // deprecated 
     height = display.getHeight(); // deprecated 

     setContentView(d); 

     jump_button = (Button) findViewById(R.id.jump); 
     jump_button.setOnClickListener(this); 
    } 
    public static Context getContext(){ 
     return mContext; 
    } 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     Log.d("touch","touched"); 

     if (draw.end == true) 
     { 
      reset=true; 
     } 
     else 
     { 
      if(last_touchpos != 0) 
      { 
       if(last_touchpos < event.getY()) 
       { 
        jump = true; 
        last_touchpos = 0; 
       } 
      } 
      else 
      { 
       last_touchpos = event.getY(); 
      } 
     } 

     return false; 
    } 
    @Override 
    public void onClick(View arg0) { 
     jump = true; 
    } 
} 

Планировка:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <run.alexander.fuchs.draw 
     android:id="@+id/canvasview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <Button 
     android:id="@+id/jump" 
     android:layout_width="100dp" 
     android:layout_height="50dp" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:text="Jump" /> 

</RelativeLayout> 

ответ

2
static boolean jump=false; 

удалить статический из этого утверждения

boolean jump=false; 
+0

Мне нужна эта satic, потому что эта переменная используется в холсте – user1293780

+0

, затем сделайте ее ложной снова после доступа на холсте jump = false; – MAC

0

Как вы, что ваш OnClick называется один раз. Используйте сообщение печати журнала в методе onClick, чтобы убедиться, что он вызывается один раз. Ваш код в порядке, и я надеюсь, что ваш onClick работает правильно и проверит остальную часть кода.

+0

ОК похоже, что вы правы, действие срабатывает, ошибка находится на холсте – user1293780

Смежные вопросы