2011-11-08 52 views
1

G'day,
我有一个ListView填充各种文本值,我想要它,当你长按和打开上下文菜单,你可以复制文本在你长时间按下的ListItem。到目前为止,我已经得到了上下文菜单中的“复制”选项,弹出:项目点击的ID - Android的ContextMenu

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) 
{ 
    //this was following another question but I don't know what to do with it 
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; 
    long selectedId = info.id; 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.context, menu); 
} 
public boolean onContextItemSelected(MenuItem item) 
{ 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) 
    { 
    case R.id.copy: 
     //used to be in a function but wasn't sure about views 
     //yes I know it's depreciated but it works ;) 
     ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
     TextView clicked = (TextView)this.findViewById(???); 
     clipboard.setText(clicked.getText()); 
     Context context = getApplicationContext(); 
     Toast copied = Toast.makeText(context, "Story copied to clipboard.", Toast.LENGTH_LONG); 
     copied.show(); 
     return true; 
    default: 
     return super.onContextItemSelected(item); 
    } 
} 

感谢

+1

你有什么问题吗? –

+0

@Chirag我不知道该把什么放在哪里?是。如果我可以传递该项目的ID长按,我可以做... findViewById(id); – ProfSmiles

回答

0

设置一个变量来保存被点击的观点:

View clicked; 

然后在其上创建上下文菜单时值分配给它:

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) 
{ 
    clicked = v; 

    //this was following another question but I don't know what to do with it 
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; 
    long selectedId = info.id; 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.context, menu); 
} 

现在你可以使用它在你的最终满足hod:

public boolean onContextItemSelected(MenuItem item) 
{ 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) 
    { 
    case R.id.copy: 
     //used to be in a function but wasn't sure about views 
     //yes I know it's depreciated but it works ;) 
     ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 

     clipboard.setText(clicked.getText()); 
     // this should work now properly. 

     Context context = getApplicationContext(); 
     Toast copied = Toast.makeText(context, "Story copied to clipboard.", Toast.LENGTH_LONG); 
     copied.show(); 
     return true; 
    default: 
     return super.onContextItemSelected(item); 
    } 
} 
+0

当我把它放进去时,Eclipse说这是一个错误,并提供将其更改为item.getTitle(),但是它只是将“复制”(我触摸的上下文菜单的标题)放入剪贴板,而我想要文本什么是ListItem我原本是长按 – ProfSmiles

+0

对不起,我的坏。您可以在调用'onCreateContextMenu'时将适当的视图存储在一个变量中。我会编辑我的答案。 –

+0

使用上面的代码,'clicked.getText()'显然是一个错误:“方法getText()未定义为类型View” – ProfSmiles

0

我想你已经回答了你自己的问题。该ID是:

long selectedId = info.id;