Skip to content
This repository was archived by the owner on Apr 29, 2024. It is now read-only.

Commit 0ddacf5

Browse files
committed
drag-drop-done
1 parent 100d8bb commit 0ddacf5

File tree

8 files changed

+92
-4
lines changed

8 files changed

+92
-4
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
using System;
2+
using Android.Content;
3+
using Notes.Droid.Effects;
4+
using Xamarin.Forms;
5+
using Xamarin.Forms.Platform.Android;
6+
using AView = Android.Widget.AdapterView;
7+
using LView = Android.Widget.ListView;
8+
using ADragFlags = Android.Views.DragFlags;
9+
10+
[assembly: ResolutionGroupName("Notes")]
11+
[assembly: ExportEffect(typeof(ItemDragAndDropEffect), "ItemDragAndDropEffect")]
12+
namespace Notes.Droid.Effects
13+
{
14+
public class ItemDragAndDropEffect : PlatformEffect
15+
{
16+
protected override void OnAttached()
17+
{
18+
// configure the ListView
19+
(Control as LView).OnItemLongClickListener = new ItemLongClickListen(this);
20+
(Control as LView).LongClickable = true;
21+
//Control.SetBackgroundColor(Android.Graphics.Color.LightGreen); // HACK: show it's bound
22+
}
23+
24+
protected override void OnDetached()
25+
{
26+
if (Control != null && Control.Handle != IntPtr.Zero)
27+
(Control as AView).OnItemLongClickListener = null;
28+
}
29+
30+
public class ItemLongClickListen : Java.Lang.Object, AView.IOnItemLongClickListener
31+
{
32+
ItemDragAndDropEffect _dragAndDropEffect;
33+
34+
public ItemLongClickListen(ItemDragAndDropEffect dragAndDropEffect)
35+
{
36+
_dragAndDropEffect = dragAndDropEffect;
37+
}
38+
39+
public bool OnItemLongClick(AView parent, Android.Views.View v, int position, long id)
40+
{
41+
if (v.Handle == IntPtr.Zero)
42+
return false;
43+
44+
// get the Note
45+
var noteString = (parent as LView).GetItemAtPosition(position).ToString();
46+
// clipData is the text from the note
47+
var data = ClipData.NewPlainText(
48+
new Java.Lang.String("Note"),
49+
new Java.Lang.String(noteString));
50+
// create a visual drag representation from the view
51+
var dragShadowBuilder = new AView.DragShadowBuilder(v);
52+
// start dragging
53+
v.StartDragAndDrop(data, dragShadowBuilder, v, (int)ADragFlags.Global);
54+
return true;
55+
}
56+
}
57+
}
58+
}

GetStarted/Notes/MultiPage/Notes.Android/Notes.Android.csproj

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
<MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
1818
<TargetFrameworkVersion>v9.0</TargetFrameworkVersion>
1919
<AndroidHttpClientHandlerType>Xamarin.Android.Net.AndroidClientHandler</AndroidHttpClientHandlerType>
20-
<NuGetPackageImportStamp></NuGetPackageImportStamp>
20+
<NuGetPackageImportStamp>
21+
</NuGetPackageImportStamp>
2122
</PropertyGroup>
2223
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
2324
<DebugSymbols>true</DebugSymbols>
@@ -52,6 +53,7 @@
5253
</PackageReference>
5354
</ItemGroup>
5455
<ItemGroup>
56+
<Compile Include="ItemDragAndDropEffect.cs" />
5557
<Compile Include="MainActivity.cs" />
5658
<Compile Include="Resources\Resource.Designer.cs" />
5759
<Compile Include="Properties\AssemblyInfo.cs" />
@@ -80,11 +82,11 @@
8082
<AndroidResource Include="Resources\mipmap-xxxhdpi\launcher_foreground.png" />
8183
</ItemGroup>
8284
<ItemGroup>
83-
<Folder Include="Resources\drawable\" />
8485
<Folder Include="Resources\drawable-hdpi\" />
8586
<Folder Include="Resources\drawable-xhdpi\" />
8687
<Folder Include="Resources\drawable-xxhdpi\" />
8788
<Folder Include="Resources\drawable-xxxhdpi\" />
89+
<Folder Include="Resources\drawable\" />
8890
</ItemGroup>
8991
<ItemGroup>
9092
<ProjectReference Include="..\Notes\Notes.csproj">
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.Notes">
3-
<uses-sdk android:minSdkVersion="21" />
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.Notes" android:installLocation="auto">
3+
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
44
<application android:label="Notes.Android"></application>
55
</manifest>

GetStarted/Notes/MultiPage/Notes.sln

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ Global
4747
{BACFD4C2-92A7-4CBA-A964-E8F799CC647C}.Debug|iPhone.Build.0 = Debug|Any CPU
4848
{BACFD4C2-92A7-4CBA-A964-E8F799CC647C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
4949
{BACFD4C2-92A7-4CBA-A964-E8F799CC647C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
50+
{BACFD4C2-92A7-4CBA-A964-E8F799CC647C}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
5051
{BACFD4C2-92A7-4CBA-A964-E8F799CC647C}.Release|Any CPU.ActiveCfg = Release|Any CPU
5152
{BACFD4C2-92A7-4CBA-A964-E8F799CC647C}.Release|Any CPU.Build.0 = Release|Any CPU
5253
{BACFD4C2-92A7-4CBA-A964-E8F799CC647C}.Release|Any CPU.Deploy.0 = Release|Any CPU
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System;
2+
using Xamarin.Forms;
3+
4+
namespace Notes
5+
{
6+
public class ItemDragAndDropEffect : RoutingEffect
7+
{
8+
public ItemDragAndDropEffect() : base("Notes.ItemDragAndDropEffect")
9+
{
10+
}
11+
}
12+
}

GetStarted/Notes/MultiPage/Notes/Models/Note.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,10 @@ public class Note
77
public string Filename { get; set; }
88
public string Text { get; set; }
99
public DateTime Date { get; set; }
10+
public override string ToString()
11+
{
12+
return $"{Text} ({Date})";
13+
}
14+
1015
}
1116
}

GetStarted/Notes/MultiPage/Notes/Notes.csproj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,9 @@
2121
<ItemGroup>
2222
<EmbeddedResource Remove="MainPage.xaml" />
2323
</ItemGroup>
24+
<ItemGroup>
25+
<EmbeddedResource Update="Page1.xaml">
26+
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
27+
</EmbeddedResource>
28+
</ItemGroup>
2429
</Project>

GetStarted/Notes/MultiPage/Notes/NotesPage.xaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
33
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
44
x:Class="Notes.NotesPage"
5+
xmlns:effects="clr-namespace:Notes"
56
Title="Notes">
67
<ContentPage.ToolbarItems>
78
<ToolbarItem Text="+"
@@ -10,6 +11,10 @@
1011
<ListView x:Name="listView"
1112
Margin="20"
1213
ItemSelected="OnListViewItemSelected">
14+
<ListView.Effects>
15+
<effects:ItemDragAndDropEffect />
16+
</ListView.Effects>
17+
1318
<ListView.ItemTemplate>
1419
<DataTemplate>
1520
<TextCell Text="{Binding Text}"

0 commit comments

Comments
 (0)