2012-07-31 80 views
0

我有兩個編輯文本中的每個listView項目。 當用戶長按listView中的任何項目時,我顯示一個contextMenu並給出兩個選項現在編輯和刪除我怎麼知道listView用戶中的哪個項目長按打開contextmenu。檢測哪個選定的項目(在ListView中)產生了ContextMenu

XML of each item of ListView 

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

<TextView android:id="@+id/templateId" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"/> 

    <TextView android:id="@+id/templateTextId" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"/> 

XML for context menu 

<?xml version="1.0" encoding="utf-8"?> 
<menu 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/editTemplate" 
      android:title="Edit" /> 
    <item android:id="@+id/saveTemplate" 
     android:title="Save" /> 
    <item android:id="@+id/deleTemplate" 
     android:title="Delete" /> 

Code 


@Override 
     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) 
      { 
        super.onCreateContextMenu(menu, v, menuInfo); 
        menu.setHeaderTitle("Select The Action"); 
        menu.add(0, v.getId(), 0, "Edit"); 
        menu.add(0, v.getId(), 0, "Delete"); 


        TextView tv=(TextView)v.findViewById(R.id.templateId); 
        selectedId=tv.getText().toString(); 
        TextView tvMessage=(TextView)v.findViewById(R.id.templateTextId); 
        selectedTemplate=tvMessage.getText().toString(); 
        //Toast.makeText(getApplicationContext(), "Item In List View Clicked ",Toast.LENGTH_SHORT).show(); 

      } 


     @Override 
     public boolean onContextItemSelected(MenuItem item) { 
      if(item.getTitle()=="Edit") 
      { 
         // Toast.makeText(ShowTemplates.this, "Edit Clicked",Toast.LENGTH_SHORT).show(); 
         Context mContext = getApplicationContext(); 
         Dialog dialog = new Dialog(ShowTemplates.this); 

         dialog.setContentView(R.layout.custome_dialog_edit_template); 
         dialog.setTitle("Edit Template"); 

         txtMsgTemplate = (EditText) dialog.findViewById(R.id.editTextTemplateCustomDialog); 
         txtMsgTemplate.setText(selectedTemplate); 
         Button btnSave=(Button)dialog.findViewById(R.id.btnSaveEditedTemplate); 

         dialog.show(); 
       } 

我試圖找到它,我得到了以下

 @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
super.onCreateContextMenu(menu, v, menuInfo); 

// Get the info on which item was selected 
AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; 

// Get the Adapter behind your ListView (this assumes you're using 
// a ListActivity; if you're not, you'll have to store the Adapter yourself 
// in some way that can be accessed here.) 
Adapter adapter = getListAdapter(); 

// Retrieve the item that was clicked on 
Object item = adapter.getItem(info.position); 

}

但我不知道如何使用這個Item對象。 有沒有其他方法可以做到這一點。 謝謝

回答

1

ListViews有一個叫做getSelectedItemPosition的函數,該函數返回一個int在適配器中的位置。我很確定你可以使用它。如果在onCreateContextMenu中爲空,則嘗試在onLongClick listener中獲取對其的引用。

+0

getSelectedItemPosition返回-1。它不適用於longClick事件。 – kamal 2012-07-31 10:37:22

+0

等一下,你沒有itemLongClickListener爲你的listview?如果是這樣的話,函數'public boolean onItemLongClick(AdapterView adapterView,View view,int position,long arg3)'應該給你longclicked item的位置。當然,那是你在找什麼? – Valentin 2012-07-31 12:56:52

相關問題