2011-06-01 51 views

回答

26

很難知道你需要實現什麼。但我的猜測是,你想對收到長按的項目執行一些操作。爲此,您有兩種選擇:

listView.setOnItemLongClickListener (new OnItemLongClickListener() { 
    public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { 
    //do your stuff here 
    } 
}); 
+0

可以請你澄清如何將OnItemLongClickListener分配給我的ListView?先謝謝你。 – 2011-06-01 20:14:42

+0

@LA_參見上文。 – Aleadam 2011-06-01 20:54:44

+0

謝謝,它完美的作品。我怎樣才能獲得特定的數據庫價值,與長期點擊的項目相關聯?應該像'this.getListAdapter()。getItem(position)'? – 2011-06-02 11:31:12

0

爲您的視圖添加自定義的View.OnLongClickListener。它可以被許多實例共享,然後您可以使用參數

onLongClick(View v) 

知道哪個視圖已被點擊並作出相應的反應。

問候, 斯特凡

+0

請問這個爛攤子了ListView的正常滾動/一扔功能創建視圖時添加View.OnLongClickListener? – 2011-06-01 18:26:53

+0

奇怪,但它也不起作用。我這樣做:'公共類BridgesCloseActivity擴展ListActivity {... OnLongClickListener longClickListener; ... longClickListener = new OnLongClickListener(){ \t public boolean onLongClick(View v){ \t \t Log.i(「」,Integer.toString(v.getId())); \t \t return true; \t} };' – 2011-06-01 19:13:47

+0

@LA_您可能需要讓onDown返回true。 – 2011-06-01 20:21:54

14

通常情況下,你會與一個上下文菜單,您可以通過與Activity.registerForContextMenu(View view)註冊ListView控件做一個列表視圖長按關聯給其他更加一致的用戶界面體驗android應用程序。

,然後重寫onContextItemSelected方法在你的應用程序是這樣的:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    listView = (ListView) findViewById(R.id.your_list_view); 
    registerForContextMenu(listView); 
} 

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    menu.setHeaderTitle(getString(R.string.menu_context_title)); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.your_context_menu, menu); 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 

    switch (item.getItemId()) { 
    case R.id.some_item: 
     // do something useful 
     return true; 
    default: 
     return super.onContextItemSelected(item); 
    } 

在列表中的位置爲info.id

還舉行了如果你只是想要捕獲的長按事件,然後我想想Snicolas的建議會起什麼作用。

+0

它不起作用。看起來像是因爲我沒有上下文菜單 - onContextItemSelected從不被調用。 – 2011-06-01 19:04:50

+0

我更新了代碼示例。你調用了'registerForContextMenu(listView)'嗎?正如其他人所說的,你是在試圖在項目被長時間點擊時嘗試獲得某些東西,或者你想要爲列表視圖上的項目獲取上下文菜單嗎? – 2011-06-01 19:55:03

+0

我試圖開始另一項活動,當該項目被長時間點擊。所以,不需要顯示上下文菜單。 'RegisterForContextMenu(listView)'在那裏。 – 2011-06-01 19:59:07

0
//Deleted individual cart items 
    //on list view cell long press 
    cartItemList.setOnItemLongClickListener (new OnItemLongClickListener() { 
      @SuppressWarnings("rawtypes") 
     public boolean onItemLongClick(AdapterView parent, View view, final int position, long id) { 
       final CharSequence[] items = { "Delete" }; 

       AlertDialog.Builder builder = new AlertDialog.Builder(context); 

       builder.setTitle("Action:"); 
       builder.setItems(items, new DialogInterface.OnClickListener() { 

        public void onClick(DialogInterface dialog, int item) { 
         cart = cartList.get(position); 
         db.removeProductFromCart(context, cart); 

         new AlertDialog.Builder(context) 
         .setTitle(getString(R.string.success)) 
         .setMessage(getString(R.string.item_removed)) 
         .setPositiveButton("Done", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           Intent intent = new Intent(CartDetailsActivity.this, HomeScreen.class); 
           startActivity(intent); 
          } 
         }) 
         .show(); 

        } 

       }); 

       AlertDialog alert = builder.create(); 

       alert.show(); 
      //do your stuff here 
       return false; 
      } 
     });