2016-11-21 237 views
-3

其實我已經上觸摸列表視圖中我會得到一個彈出窗口的列表視圖。但是,當我在列表上觸摸時,我得到了多個窗口單點觸摸。在單點觸摸越來越多點觸摸事件

活動:

listView1.setAdapter(adapter); 
adapter.notifyDataSetChanged(); 
listView1.setOnTouchListener(new AdapterView.OnTouchListener() { 

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

     dialog = new Dialog(PendingOrdersActitvity.this); 
     dialog.setContentView(R.layout.itembumping); 
     dialog.show(); 

     list1=(ListView)dialog.findViewById(R.id.list1); 
     adapter = new CustomAdapter(PendingOrdersActitvity.this,itemsList1); 
     list1.setAdapter(adapter); 
     list1.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      // .... 
     }); 
     return true; 
     } 
    }); 
+0

這是因爲onTouch會收到多個的TouchEvent狀態,嘗試學習OnTouchListener是如何工作的,這樣就可以適當地調整你的代碼,你還需要過濾特定的事件。閱讀文檔@ https://developer.android.com/reference/android/view/View.OnTouchListener.html#onTouch(android.view.View,android.view.MotionEvent) – JoxTraex

+0

你爲什麼不出去的OnItemSelectedListener ListView ccomponent - 只要您觸摸列表項目,該方法就會調用。 – Bethan

回答

0

可以使用setOnClickListener代替TouchListener,裏面的方法添加代碼對話框調用。

如果你想多點觸摸,你可以在你的活動

private int mActivePointerId; 
public boolean onTouchEvent(MotionEvent event) { 
    .... 
    // Get the pointer ID 
    mActivePointerId = event.getPointerId(0); 

    // ... Many touch events later... 

    // Use the pointer ID to find the index of the active pointer 
    // and fetch its position 
    int pointerIndex = event.findPointerIndex(mActivePointerId); 
    // Get the pointer's current position 
    float x = event.getX(pointerIndex); 
    float y = event.getY(pointerIndex); 
} 
0

使用此代碼,你可以,如果你使用的是ListView使用onItemClickListener。或者,如果你想使用onTouchListener出於某種原因,你必須檢查dialog不可見,如果沒有的話顯示OnTouchListener接口dialog

if(!dialog.isShowing()){ 
    // Show the dialog 
} 
1

onTouch方法監聽許多不同的觸摸事件行動。 所以,你應該分清事件的操作類型如下圖所示。

listView1.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     switch (motionEvent.getAction()) { 
      case MotionEvent.ACTION_UP: 
       // Do something here for touch point up event 

       return true; 
      case MotionEvent.ACTION_DOWN: 
       // Do something here for touch point down event 

       return true; 
     } 

     return false; 
    } 
}); 

如果你只是想選擇列表視圖一個項目,我推薦你使用setOnItemClickListener,而不是使用setOnTouchListener

下面的代碼說明如何使用setOnItemClickListener

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     // Do something here!! 
    } 
}); 
0

TNQ每一個我得到了解決

listView1.setOnTouchListener(新AdapterView.OnTouchListener(){

  @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if(event.getAction() == MotionEvent.ACTION_UP){ // code 

迴歸真實; }返回false;

}