从listview复制并共享文本到剪贴板

时间:2014-09-24 21:33:56

标签: android xml parsing copy clipboard

我正在开发一个基本的Android应用程序,它使用SAXParser从资产中解析xml文件,并且我已经成功解析了xml。

然后我使用以下代码注册Context的已解析文本:

..........

this.registerForContextMenu(content);


@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.setHeaderTitle("Choose");
    menu.add(0, v.getId(), 0, "Copy");
    menu.add(0, v.getId(), 0, "Share");

    if (selectedText.size() > 0) {
        menu.add(0, v.getId(), 0, "Copy");
        menu.add(0, v.getId(), 0, "Share");
    }

}

@Override
public boolean onContextItemSelected(MenuItem item) {
    if (item.getTitle() == "Copy") {
        copySelectedText(getSelectedText());
        return true;
    } else if (item.getTitle() == "Share") {
        shareSelectedText(getSelectedText());
        return true;
    } else
        return false;
}

public boolean copySelectedText(String text) {
    ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    ClipData clip = ClipData.newIntent(position, getIntent());
    clipboard.setPrimaryClip(clip);
    return true;
}

private void shareSelectedText(String text) {
    copySelectedText(null);

    Intent sharingIntent = new Intent(Intent.ACTION_SEND);
    sharingIntent.setType("text/plain");
    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, text);
    sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
            "Shared from MyApp");
    startActivity(Intent.createChooser(sharingIntent,
            "Sharing text using"));
}

public String getSelectedText() {

    //How do I code here?? }

    return null;
}

使用上面的代码,当我长时间点击已解析文本的任何部分时,上下文菜单工作正常。但我的问题是,我不知道将解析后的文本放入剪贴板。有人可以帮帮我吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我已经解决了我的问题。我就是这样做的。

我从assets文件夹解析了一个xml文件,并将结果传递给listview数组。我最初的问题是如何在长按文本时复制文本。但现在我设法解决了我的问题,我在这里分享它。希望它可以帮助有类似问题的人。

@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Choose");
menu.add(Menu.NONE, CONTEXTMENU_COPY, 0, "Copy");
menu.add(Menu.NONE, CONTEXTMENU_SHARE, 1, "Share");
}


@Override public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {

case CONTEXTMENU_COPY:
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();

//The textview which holds the parsed xml
CharSequence selectedTexts = ((TextView)menuInfo.targetView.findViewById(R.id.text)).getText();
ClipboardManager clipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("Intent", (CharSequence) selectedTexts);
clipboard.setPrimaryClip(clip);
Toast.makeText(getApplicationContext(), "Selected text is copied",Toast.LENGTH_SHORT).show();
break;

case CONTEXTMENU_SHARE:
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
CharSequence textToShare = ((TextView) info.targetView.findViewById(R.id.text)).getText();
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, textToShare);
shareIntent.setType("text/plain");
startActivity(Intent.createChooser(shareIntent, "Hiaite zangin share in"));
}
return super.onContextItemSelected(item); }

我需要做的就是这一行代码,确定哪个项目是长按的!

CharSequence textToShare = ((TextView) info.targetView.findViewById(R.id.text)).getText();

这么简单,我可以踢自己。我希望这对像我这样一些苦苦挣扎的新手有所帮助,并为一些初学者带来很多麻烦! :P