C# Xamarin android通过webservice将数据从列表视图保存到数据库

C# Xamarin android通过webservice将数据从列表视图保存到数据库,c#,android,xamarin,C#,Android,Xamarin,当我尝试保存最后一个项目时,列表视图中的每个项目都有一个按钮没有问题,但当我尝试保存另一个项目时,它会多次保存数据 这是我的密码 公共覆盖视图GetView(int位置、视图转换视图、视图组父视图) { var项目=交易[头寸]; 视图=转换视图; 如果(view==null)//没有要重用的视图,则创建新的 视图=context.LayoutInflater.Inflate(Resource.Layout.trans_Layout,null); view.findviewbyd(Resourc

当我尝试保存最后一个项目时,列表视图中的每个项目都有一个按钮没有问题,但当我尝试保存另一个项目时,它会多次保存数据

这是我的密码

公共覆盖视图GetView(int位置、视图转换视图、视图组父视图)

{
var项目=交易[头寸];
视图=转换视图;
如果(view==null)//没有要重用的视图,则创建新的
视图=context.LayoutInflater.Inflate(Resource.Layout.trans_Layout,null);
view.findviewbyd(Resource.Id.supply\u amount\u txt).Text=item.amount1;
view.findviewbyd(Resource.Id.demand\u amount\u txt).Text=item.amount2;
//view.findviewbyd(Resource.Id.Text3).Text=item.client\u代码;
view.findviewbyd(Resource.Id.supply\u cur\u txt).Text=item.cur1;
view.findviewbyd(Resource.Id.demadn\u cur\u txt).Text=item.cur2;
view.findviewbyd(Resource.Id.rate\u txt).Text=item.rate;
view.findviewbyd(Resource.Id.Id\u txt).Text=item.tran\u Id;
view.findviewbyd(Resource.Id.user\u name\u txt).Text=item.username;
view.findviewbyd(Resource.Id.tran\u date\u time\u txt).Text=item.tran\u date;
accept_btn=view.findviewbyd(Resource.Id.btn);
amo2=转换为特定值(项目amount2);
cu2=项目.cur2;
amo1=转换为特定值(项目amount1);
cu1=项目1.cur1;
rat=换算到特定值(项目费率);
tr_id=转换为32(项目.tran_id);
cl_代码=项目。客户_代码;
接受\u btn.单击+=委托{
myWS.ChekTranIDAsync(转换为32(item.tran_id));
XTran=Convert.ToInt32(Convert.ToInt32(item.tran_id));
myWS.ChekTranIDCompleted+=myWS_ChekTranIDCompleted;
};
返回视图;
}
私有void MyWS_ChekTranIDCompleted(对象发送方,MyWS.ChekTranIDCompletedEventArgs e)
{
//myWS.accept_-tranAsync(“123”,Convert.ToDecimal(item.amount2),item.cur2,Convert.ToDecimal(item.amount1),item.cur1,Convert.ToDecimal(item.rate),“Convert.ToDecimal”,Convert.ToInt32(item.tran\u id),item.client\u代码);
myWS.accept_transasync(“123”,amo2,cu2,amo1,cu2,rat,“xxx”,XTran,cl_代码);
myWS.accept\u tranCompleted+=myWS\u accept\u tranCompleted;
}

当项目被回收用于可视化显示时,此代码被多次执行,并且GetView为同一视图持有者运行多次。所以你需要先退订。

你能再解释一下吗?!我们不能确定调用getView()的顺序和次数绝对没有保证。最好是重复使用旧视图。你能解释更多吗?!你想知道更多关于它的什么?@WendyZang MSFT感谢你的帮助。。。。你说“重用旧视图会更好”我怎么做?!旧视图是重用的convertView。你可以参考下面的链接。
    {

        var item = trans[position];

        View view = convertView;

        if (view == null) // no view to re-use, create new

            view = context.LayoutInflater.Inflate(Resource.Layout.trans_layout, null);

   view.FindViewById<TextView>(Resource.Id.supply_amount_txt).Text = item.amount1;
        view.FindViewById<TextView>(Resource.Id.demand_amount_txt).Text = item.amount2;
        //view.FindViewById<TextView>(Resource.Id.Text3).Text = item.client_code;
        view.FindViewById<TextView>(Resource.Id.supply_cur_txt).Text = item.cur1;
        view.FindViewById<TextView>(Resource.Id.demadn_cur_txt).Text = item.cur2;
        view.FindViewById<TextView>(Resource.Id.rate_txt).Text = item.rate;
        view.FindViewById<TextView>(Resource.Id.ID_txt).Text = item.tran_id;
        view.FindViewById<TextView>(Resource.Id.user_name_txt).Text = item.username;
        view.FindViewById<TextView>(Resource.Id.tran_date_time_txt).Text = item.tran_date ;
        accept_btn = view.FindViewById<Button>(Resource.Id.btn);        
        amo2 = Convert.ToDecimal(item.amount2);
        cu2 = item.cur2;
        amo1 = Convert.ToDecimal(item.amount1);
        cu1 = item.cur1;
        rat = Convert.ToDecimal(item.rate);
        tr_id = Convert.ToInt32(item.tran_id);
        cl_code = item.client_code;
           accept_btn.Click +=delegate {
               myWS.ChekTranIDAsync(Convert.ToInt32(item.tran_id));
               XTran = Convert.ToInt32(Convert.ToInt32(item.tran_id));
               myWS.ChekTranIDCompleted += MyWS_ChekTranIDCompleted;

           };
 


        return view;
      
    }


private void MyWS_ChekTranIDCompleted(object sender, myWS.ChekTranIDCompletedEventArgs e)
    {
        //myWS.accept_tranAsync("123", Convert.ToDecimal(item.amount2), item.cur2, Convert.ToDecimal(item.amount1), item.cur1, Convert.ToDecimal(item.rate), "ابو ليلى", Convert.ToInt32(item.tran_id), item.client_code);
        myWS.accept_tranAsync("123", amo2, cu2, amo1, cu2, rat, "xxx", XTran, cl_code);
        myWS.accept_tranCompleted += MyWS_accept_tranCompleted;


    }
accept_btn.Click +=delegate