如何使用自定义适配器在RelativeLayout上打开ContextMenu

时间:2012-05-02 01:33:01

标签: android contextmenu android-fragments relativelayout

我正在尝试重新创建在Android 4.0音乐播放器中看到的ListView,它允许通过点击该行右侧的区域来访问ContextMenu

Screenshot of the Music Player ListView in Android ICS

为此,我使用RelativeLayout创建复杂的ListFragment行。这很容易重新创建:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/row_select">

<RelativeLayout
    android:id="@+id/grabber"
    android:layout_width="22dip"
    android:layout_height="110dip"
    android:layout_alignParentLeft="true"
    android:clickable="true" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:src="@drawable/grabber" />
</RelativeLayout>

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

    android:singleLine="true"
    android:ellipsize="end"


    android:paddingTop="10dip"
    android:layout_marginLeft="5dip"
    android:layout_alignParentTop="true"
    android:layout_toRightOf="@+id/grabber"
    android:layout_toLeftOf="@+id/playlist_context"

    android:textAppearance="@style/Title"/>

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

    android:layout_alignLeft="@+id/title"
    android:layout_alignRight="@+id/title"
    android:layout_below="@+id/title"

    android:textAppearance="@style/Subtitle"
    android:lines="1"
    android:ellipsize="end" />

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

    android:paddingBottom="10dip"

    android:layout_alignLeft="@+id/title"
    android:layout_alignRight="@+id/title"
    android:layout_below="@+id/subtitle"

    android:textAppearance="@style/body"
    android:lines="2"
    android:ellipsize="end"  />

<RelativeLayout
    android:id="@+id/playlist_context"
    android:layout_width="26dip"
    android:layout_height="110dip"

    android:layout_alignParentRight="true"

    android:clickable="true"
    android:background="@drawable/row_select">

    <ImageView
        android:id="@+id/playlist_context"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:paddingRight="5dip"
        android:paddingLeft="5dip"
        android:paddingBottom="15dip"
        android:src="@drawable/triangle" />

</RelativeLayout>



<TextView
    android:id="@+id/hidden_id"
    android:layout_width="0dip"
    android:layout_height="0dip"
    android:visibility="gone" />

</RelativeLayout>

我还使用自己的自定义CursorAdapter使用bindView(View view, Context context, Cursor c)填充每一行。

我现在需要在点击该行的ContextMenu时显示一行R.id.playlist_context。此可点击区域在上面的屏幕截图中以红色突出显示。在bindView我可以设置onClickListener

//Watch for the context menu click
((RelativeLayout)view.findViewById(R.id.playlist_context)).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Log.i("PlaylistCursorAdapter", "Clicked something");
        }
    });

这很有效,每次点击RelativeLayout时都会记录“点击内容”。

我还可以使用registerForContextMenu(getListView());中的ListFragment来实现长按时显示的ContextMenu。这是有据可查的。


所以我可以在我的自定义适配器中捕获点击。我可以在我的ContextMenu中创建并打开ListFragment

如何合并,即如何点击ContextMenu时如何显示RelativeLayout

感谢您的帮助!

0 个答案:

没有答案