3

В моей деятельности У меня есть список просмотров, для этого у меня есть и onItemClickListener, и onTouchListener. Когда я нажимаю строку в моем методе list.OnTouch, вызываемом для MotionEventDown и Up. Для обоих случаев я возвращаю «ложь», так как я не хочу обрабатывать событие касания, но хочу только наблюдать за ним. На данный момент я ожидаю, что onItemClick должен был позвонить, но этого не происходит. Но если я перемещаю свой список, то вызывается событие перемещения «OnTouch», и после этого, когда я нажимаю элемент, он запускается. Итак, почему мой itemClick не запускался изначально и почему он срабатывал после перемещения в режиме просмотра списка?OnItemClickListener не запускается, если у меня есть onTouchListener, если я не прокручиваю?

код:

public class MainActivity extends Activity { 

Handler rHandler; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ListView lv = (ListView) this.findViewById(R.id.mylist); 
    lv.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      System.out.println("An Item is clicked not touched"); 
     } 

    }); 
     rHandler = new Handler(this,lv); 
    } 


} 

Я заселение пользовательских ListView лв в адаптере и этот список строка состоит TextViews и imageViews.Also У меня есть некоторые OnClick события на imageViews.So, я попытался андроид: фокусируемый и андроид : focusableInTouchMode устанавливается в false в imageView. Но не удалось.

В Handler.java

public class Handler implements View.OnTouchListener { 
    public Handler(Context mContext,ListView lv) { 
     lv.setOnTouchListener(this); 
    } 

    @Override 
     public final boolean onTouch(View view, MotionEvent event) { 
      switch (event.getAction()) { 
     case MotionEvent.ACTION_MOVE: { 
      System.out.println(" Motion ... "); 
      break; 
     } 

     case MotionEvent.ACTION_DOWN: { 
      System.out.println(" Motion Down "); 
      break; 
     } 

     case MotionEvent.ACTION_CANCEL: 
     case MotionEvent.ACTION_UP: { 
      System.out.println(" Motion Up "); 
      break; 
     } 
     } 
     System.out.println("I am returning false"); 
     return false; 
     } 
    } 

Мой OnItemClick пришел к активным, как только я нажимаю изображение OnClick события или если я пошевелил list.Looks очень странно !!!

+0

опубликовать фрагмент коды .. –

ответ

0

Вы должны вернуть super.onTouchEvent (событие); вместо этого я возвращаю false. Извлекая ложь, вы сообщаете системе, что не хотите, чтобы события касания отображались в вашем представлении, и поэтому onClickEvent игнорируется.

2

да, это не называется. Что вы можете сделать, это

@Override 
    public boolean onTouch(View v, MotionEvent event) { 

     switch(event.getAction()) 
     { 
     case MotionEvent.ACTION_DOWN: 

      break;   
     case MotionEvent.ACTION_MOVE: 

      break; 

     case MotionEvent.ACTION_UP: 

      if(!mIsTouchHandeled){ 
       int position = mChatListView.pointToPosition((int) event.getX(), (int) event.getY()); 
       if(position!=ListView.INVALID_POSITION){ 
        mChatListView.performItemClick(mChatListView.getChildAt(position-mChatListView.getFirstVisiblePosition()), position, mChatListView.getItemIdAtPosition(position)); 
       } 
      } 
      break; 
     }   
     //  return super.onTouchEvent(event);  


     return false; 
    } 

} 

В основном я нахожу в действие вверх, что, если сенсорная работа не закончена, я буду называть мой OnItemClick методом performClick.

Надеется, что это поможет

+0

Thanx buddy..helped много !!! – dd619

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

  • Нет связанных вопросов^_^