Xamarin 单击一个项目-保留-并滑动到其他站点

Xamarin 单击一个项目-保留-并滑动到其他站点,xamarin,xamarin.android,Xamarin,Xamarin.android,如果单击了对象,则不应立即调用下一页。但是单击应该保留在对象上,直到您滚动到下一页 它如何在项目上保持单击命令 它如何从单击的项目滑动到其他页面 更新 单击一个项目>保持>从保持的项目向左和向右滑动 这是实际行为: private int index = -1; break; } return true; } } 要在单击项目时突出显示该项目,您可以为项目视图设置背景色,要为每个项目执行滑动手势,我认为您需要为每

如果单击了对象,则不应立即调用下一页。但是单击应该保留在对象上,直到您滚动到下一页

它如何在项目上保持单击命令

它如何从单击的项目滑动到其他页面

更新

单击一个项目>保持>从保持的项目向左和向右滑动

这是实际行为:

    private int index = -1;

                break;
        }
        return true;
    }
}

要在单击项目时突出显示该项目,您可以为项目视图设置背景色,要为每个项目执行滑动手势,我认为您需要为每个项目实现
IOnTouchListener
。在这里,我创建了一个适配器来实现此功能:

public类LVAdapter:BaseAdapter,View.IOnTouchListener
{
私有列表项=新列表();
私人活动语境;
私有整数指数=-1;
公共枚举开关
{
LR,//从左到右
RL,//从右到左
TB,//从上到下
BT,//从下到上
无//未检测到任何操作时
}
私人内部最小距离=100;
私人浮动downX,downY,upX,upY;
专用SwipeAction maction=SwipeAction.None;
公共LVAdapter(活动上下文,列表项):base()
{
this.context=上下文;
这个项目=项目;
}
公共覆盖ListItemModel此[int位置]
{
获取{返回项目[位置];}
}
公共覆盖整数计数
{
获取{return items.Count;}
}
公共覆盖长GetItemId(int位置)
{
返回位置;
}
私有void SetSelectedItem(内部位置)
{
指数=位置;
NotifyDataSetChanged();
}
私有类MyViewHolder:Java.Lang.Object
{
公共文本视图名称{get;set;}
公共文本视图说明{get;set;}
公共int索引{get;set;}
}
公共覆盖视图GetView(int位置、视图转换视图、视图组父视图)
{
MyViewHolder=null;
var-view=convertView;
如果(视图!=null)
holder=视图。标记为MyViewHolder;
if(holder==null)
{
holder=新的MyViewHolder();
视图=context.LayoutInflater.Inflate(Resource.Layout.ItemCell,null);
holder.Name=view.findviewbyd(Resource.Id.nametxt);
holder.Description=view.findviewbyd(Resource.Id.detailtxt);
holder.index=位置;
视图.标签=支架;
}
holder.Name.Text=项目[位置].Name;
holder.Description.Text=项目[位置].说明;
如果(索引!=-1&&position==索引)
{
holder.Name.SetBackgroundColor(Android.Graphics.Color.Red);
holder.Description.SetBackgroundColor(Android.Graphics.Color.粉色);
}
其他的
{
holder.Name.SetBackgroundColor(Android.Graphics.Color.RoyalBlue);
holder.Description.SetBackgroundColor(Android.Graphics.Color.SeaGreen);
}
view.SetOnTouchListener(这个);
返回视图;
}
公共bool OnTouch(视图v,运动事件e)
{
开关(电动)
{
案例MotionEventActions.Down:
downX=e.GetX();
绒毛=e.GetY();
maction=开关动作。无;
打破
case MotionEventActions。移动:
upX=e.GetX();
upY=e.GetY();
var deltaX=下行x-上行x;
var deltaY=绒毛-upY;
如果(数学绝对值(deltaX)>最小距离)
{
如果(deltaX<0)
{
maction=SwipeAction.LR;
}
否则如果(deltaX>0)
{
maction=SwipeAction.RL;
}
返回true;
}
else if(数学绝对值(deltaY)>最小距离)
{
如果(三角洲<0)
{
maction=SwipeAction.TB;
}
否则如果(deltaY>0)
{
maction=SwipeAction.BT;
}
返回false;
}
打破
case MotionEventActions.Up:
var holder=v.标记为MyViewHolder;
if(maction==SwipeAction.None)
{
SetSelectedItem(持有人指数);
}
else if(maction==SwipeAction.LR | maction==SwipeAction.RL)
{
if(holder.index==索引)
背景。起始触觉(类型(活动1));
}
打破
}
返回true;
}
}
就我而言,
ListItemModel
非常简单:

公共类ListItemModel
{
公共字符串名称{get;set;}
公共字符串说明{get;set;}
}
您可以根据需要尝试修改模型和支架


@My_yz,你试过我的代码了吗?这应该有相同的行为。@My_yz,那么他们必须在一个活动中。我开始了一个新的活动。@My_yz,没那么简单,如果他们在同一个活动中,布局应该改变,可能是一个
ViewPager
或其他东西。这个答案解决了手势问题。然后你可能需要发布一个新的帖子来询问这个布局。@My_yz,怎么说…重要的是它是一个水平滚动的布局,我没有尝试过,但我认为如果使用
ViewPager
,那么listview应该放在一个时间,在其他项目中显示你的详细信息。