2012-07-31 45 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

相关问题