我正在尝试重新创建在Android 4.0音乐播放器中看到的ListView,它允许通过点击该行右侧的区域来访问ContextMenu
:
为此,我使用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
?
感谢您的帮助!