Added in API level 11

ClipData


open class ClipData : Parcelable
kotlin.Any
   ↳ android.content.ClipData

Representation of a clipped data on the clipboard.

ClipData is a complex type containing one or more Item instances, each of which can hold one or more representations of an item of data. For display to the user, it also has a label.

A ClipData contains a ClipDescription, which describes important meta-data about the clip. In particular, its getDescription().getMimeType(int) must return correct MIME type(s) describing the data in the clip. For help in correctly constructing a clip with the correct MIME type, use newPlainText(java.lang.CharSequence,java.lang.CharSequence), newUri(android.content.ContentResolver,java.lang.CharSequence,android.net.Uri), and newIntent(java.lang.CharSequence,android.content.Intent).

Each Item instance can be one of three main classes of data: a simple CharSequence of text, a single Intent object, or a Uri. See Item for more details.

Implementing Paste or Drop

To implement a paste or drop of a ClipData object into an application, the application must correctly interpret the data for its use. If the Item it contains is simple text or an Intent, there is little to be done: text can only be interpreted as text, and an Intent will typically be used for creating shortcuts (such as placing icons on the home screen) or other actions.

If all you want is the textual representation of the clipped data, you can use the convenience method Item.coerceToText. In this case there is generally no need to worry about the MIME types reported by getDescription().getMimeType(int), since any clip item can always be converted to a string.

More complicated exchanges will be done through URIs, in particular "content:" URIs. A content URI allows the recipient of a ClipData item to interact closely with the ContentProvider holding the data in order to negotiate the transfer of that data. The clip must also be filled in with the available MIME types; newUri(android.content.ContentResolver,java.lang.CharSequence,android.net.Uri) will take care of correctly doing this.

For example, here is the paste function of a simple NotePad application. When retrieving the data from the clipboard, it can do either two things: if the clipboard contains a URI reference to an existing note, it copies the entire structure of the note into a new note; otherwise, it simply coerces the clip into text and uses that as the new note's contents.

In many cases an application can paste various types of streams of data. For example, an e-mail application may want to allow the user to paste an image or other binary data as an attachment. This is accomplished through the ContentResolver ContentResolver#getStreamTypes(Uri, String) and ContentResolver#openTypedAssetFileDescriptor(Uri, String, android.os.Bundle) methods. These allow a client to discover the type(s) of data that a particular content URI can make available as a stream and retrieve the stream of data.

For example, the implementation of Item.coerceToText itself uses this to try to retrieve a URI clip as a stream of text:

Implementing Copy or Drag

To be the source of a clip, the application must construct a ClipData object that any recipient can interpret best for their context. If the clip is to contain a simple text, Intent, or URI, this is easy: an Item containing the appropriate data type can be constructed and used.

More complicated data types require the implementation of support in a ContentProvider for describing and generating the data for the recipient. A common scenario is one where an application places on the clipboard the content: URI of an object that the user has copied, with the data at that URI consisting of a complicated structure that only other applications with direct knowledge of the structure can use.

For applications that do not have intrinsic knowledge of the data structure, the content provider holding it can make the data available as an arbitrary number of types of data streams. This is done by implementing the ContentProvider ContentProvider#getStreamTypes(Uri, String) and ContentProvider#openTypedAssetFile(Uri, String, android.os.Bundle) methods.

Going back to our simple NotePad application, this is the implementation it may have to convert a single note URI (consisting of a title and the note text) into a stream of plain text data.

The copy operation in our NotePad application is now just a simple matter of making a clip containing the URI of the note being copied:

Note if a paste operation needs this clip as text (for example to paste into an editor), then Item#coerceToText(Context) will ask the content provider for the clip URI as text and successfully paste the entire note.

Summary

Nested classes
open

Description of a single item in a ClipData.

Inherited constants
Public constructors
ClipData(label: CharSequence!, mimeTypes: Array<String!>!, item: ClipData.Item!)

Create a new clip.

ClipData(description: ClipDescription!, item: ClipData.Item!)

Create a new clip.

ClipData(other: ClipData!)

Create a new clip that is a copy of another clip.

Public methods
open Unit

Add a new Item to the overall ClipData container.

open Unit
addItem(resolver: ContentResolver!, item: ClipData.Item!)

Add a new Item to the overall ClipData container.

open Int

open ClipDescription!

Return the ClipDescription associated with this data, describing what it contains.

open ClipData.Item!
getItemAt(index: Int)

Return a single item inside of the clip data.

open Int

Return the number of items in the clip data.

open static ClipData!
newHtmlText(label: CharSequence!, text: CharSequence!, htmlText: String!)

Create a new ClipData holding data of the type ClipDescription#MIMETYPE_TEXT_HTML.

open static ClipData!
newIntent(label: CharSequence!, intent: Intent!)

Create a new ClipData holding an Intent with MIME type ClipDescription#MIMETYPE_TEXT_INTENT.

open static ClipData!

Create a new ClipData holding data of the type ClipDescription#MIMETYPE_TEXT_PLAIN.

open static ClipData!
newRawUri(label: CharSequence!, uri: Uri!)

Create a new ClipData holding an URI with MIME type ClipDescription#MIMETYPE_TEXT_URILIST.

open static ClipData!
newUri(resolver: ContentResolver!, label: CharSequence!, uri: Uri!)

Create a new ClipData holding a URI.

open String

open Unit
writeToParcel(dest: Parcel, flags: Int)

Properties
static Parcelable.Creator<ClipData!>

Public constructors

ClipData

Added in API level 11
ClipData(
    label: CharSequence!,
    mimeTypes: Array<String!>!,
    item: ClipData.Item!)

Create a new clip.

Parameters
label CharSequence!: Label to show to the user describing this clip.
mimeTypes Array<String!>!: An array of MIME types this data is available as.
item ClipData.Item!: The contents of the first item in the clip.

ClipData

Added in API level 11
ClipData(
    description: ClipDescription!,
    item: ClipData.Item!)

Create a new clip.

Parameters
description ClipDescription!: The ClipDescription describing the clip contents.
item ClipData.Item!: The contents of the first item in the clip.

ClipData

Added in API level 16
ClipData(other: ClipData!)

Create a new clip that is a copy of another clip. This does a deep-copy of all items in the clip.

Parameters
other ClipData!: The existing ClipData that is to be copied.

Public methods

addItem

Added in API level 11
open fun addItem(item: ClipData.Item!): Unit

Add a new Item to the overall ClipData container.

This method will not update the list of available MIME types in the ClipDescription. It should be used only when adding items which do not add new MIME types to this clip. If this is not the case, use addItem(android.content.ContentResolver,android.content.ClipData.Item) or call ClipData(java.lang.CharSequence,java.lang.String[],android.content.ClipData.Item) with a complete list of MIME types.

Parameters
item ClipData.Item!: Item to be added.

addItem

Added in API level 26
open fun addItem(
    resolver: ContentResolver!,
    item: ClipData.Item!
): Unit

Add a new Item to the overall ClipData container.

Unlike addItem(android.content.ClipData.Item), this method will update the list of available MIME types in the ClipDescription.

Parameters
resolver ContentResolver!: ContentResolver used to get information about the URI possibly contained in the item.
item ClipData.Item!: Item to be added.

describeContents

Added in API level 11
open fun describeContents(): Int
Return
Int a bitmask indicating the set of special object types marshaled by this Parcelable object instance. Value is either 0 or android.os.Parcelable#CONTENTS_FILE_DESCRIPTOR

getDescription

Added in API level 11
open fun getDescription(): ClipDescription!

Return the ClipDescription associated with this data, describing what it contains.

getItemAt

Added in API level 11
open fun getItemAt(index: Int): ClipData.Item!

Return a single item inside of the clip data. The index can range from 0 to getItemCount()-1.

getItemCount

Added in API level 11
open fun getItemCount(): Int

Return the number of items in the clip data.

newHtmlText

Added in API level 16
open static fun newHtmlText(
    label: CharSequence!,
    text: CharSequence!,
    htmlText: String!
): ClipData!

Create a new ClipData holding data of the type ClipDescription#MIMETYPE_TEXT_HTML.

Parameters
label CharSequence!: User-visible label for the clip data.
text CharSequence!: The text of clip as plain text, for receivers that don't handle HTML. This is required.
htmlText String!: The actual HTML text in the clip.
Return
ClipData! Returns a new ClipData containing the specified data.

newIntent

Added in API level 11
open static fun newIntent(
    label: CharSequence!,
    intent: Intent!
): ClipData!

Create a new ClipData holding an Intent with MIME type ClipDescription#MIMETYPE_TEXT_INTENT.

Parameters
label CharSequence!: User-visible label for the clip data.
intent Intent!: The actual Intent in the clip.
Return
ClipData! Returns a new ClipData containing the specified data.

newPlainText

Added in API level 11
open static fun newPlainText(
    label: CharSequence!,
    text: CharSequence!
): ClipData!

Create a new ClipData holding data of the type ClipDescription#MIMETYPE_TEXT_PLAIN.

Parameters
label CharSequence!: User-visible label for the clip data.
text CharSequence!: The actual text in the clip.
Return
ClipData! Returns a new ClipData containing the specified data.

newRawUri

Added in API level 11
open static fun newRawUri(
    label: CharSequence!,
    uri: Uri!
): ClipData!

Create a new ClipData holding an URI with MIME type ClipDescription#MIMETYPE_TEXT_URILIST. Unlike newUri(android.content.ContentResolver,java.lang.CharSequence,android.net.Uri), nothing is inferred about the URI -- if it is a content: URI holding a bitmap, the reported type will still be uri-list. Use this with care!

Parameters
label CharSequence!: User-visible label for the clip data.
uri Uri!: The URI in the clip.
Return
ClipData! Returns a new ClipData containing the specified data.

newUri

Added in API level 11
open static fun newUri(
    resolver: ContentResolver!,
    label: CharSequence!,
    uri: Uri!
): ClipData!

Create a new ClipData holding a URI. If the URI is a content: URI, this will query the content provider for the MIME type of its data and use that as the MIME type. Otherwise, it will use the MIME type ClipDescription#MIMETYPE_TEXT_URILIST.

Parameters
resolver ContentResolver!: ContentResolver used to get information about the URI.
label CharSequence!: User-visible label for the clip data.
uri Uri!: The URI in the clip.
Return
ClipData! Returns a new ClipData containing the specified data.

toString

Added in API level 11
open fun toString(): String
Return
String a string representation of the object.

writeToParcel

Added in API level 11
open fun writeToParcel(
    dest: Parcel,
    flags: Int
): Unit
Parameters
dest Parcel: The Parcel in which the object should be written. This value cannot be null.
flags Int: Additional flags about how the object should be written. May be 0 or PARCELABLE_WRITE_RETURN_VALUE. Value is either 0 or a combination of android.os.Parcelable#PARCELABLE_WRITE_RETURN_VALUE, and android.os.Parcelable.PARCELABLE_ELIDE_DUPLICATES

Properties

CREATOR

Added in API level 11
static val CREATOR: Parcelable.Creator<ClipData!>