Top TableView Cell未更新

时间:2017-01-30 13:56:38

标签: ios xamarin mvvmcross

我目前正在使用MvvmCross和Xamarin iOS开发应用程序。 该应用程序的主要视图分为两部分。视图的下半部分是表格视图。

表视图由正常工作的异步proses填充。

如果用户点击选择项目,则会将其导航到另一个视图,以便他们更新所选项目。此更新导致重新加载数据源(因为编辑可能已影响其他项)和要重新加载的表视图。

在重新加载过程中,表视图不在视图中;但重新加载是在主线程上执行的。

除了选择顶部可见行之外,在所有情况下都可以正常工作。在这种情况下,单元格永远不会更新。每次选择重复使用时,视图都会使用创建的初始数据进行渲染。

从控制台输出中我可以看到正在所有单元格上调用准备重用。我还可以确认正在主线程上调用表上的重新加载操作。

表数据源(从MvxSimpleTableSource扩展)确实调用GetOrCreateCellFor的重载,并更新绑定项的数据。 我的所有调查都无法解决问题。

请任何人帮忙。

更新:我现在已经解决了这个问题,想了解它为什么会发生。

这个问题似乎是由于MvxSimpleTableSource的RowSelected方法的过载引起的。

public class Test extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        Question question=new Question();
        getQuestionNo("nik",question);
        Toast.makeText(Test.this, question.getQue(), Toast.LENGTH_LONG).show();

    }
    void getQuestionNo(String email, final Question question)
    {
        String urlQueNo = PageConfig.QUIZ_QUESTIONNO + email;
        StringRequest stringRequest = 
                   new StringRequest(urlQueNo, new Response.Listener<String>()
        {
            @Override
            public void onResponse(String response)
            {
                question.setQue(response);
            }
        }, new Response.ErrorListener()
        {
            @Override
            public void onErrorResponse(VolleyError error)
            {
                Toast.makeText(Test.this, 
                             "error on response1", Toast.LENGTH_LONG).show();

            }
        });
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }
}
public class Question
{
    private String que="hi";


    public String getQue()
    {
        return que;
    }

    public void setQue(String que)
    {
        this.que = que;
    }
}

绑定命令是异步的,并且代码适用于所有选定的行,除非它是顶部可见行。

当用户选择顶部可见行时,即使直接调用SetNeedsDisplay,单元格似乎也会进入永远不会更新视图的状态。

1 个答案:

答案 0 :(得分:0)

不是100%肯定,但我相信这可能是问题所在:

var cell = this.GetCell(tableView, indexPath) as CustomTableCellWithImage;

GetCell是操作系统在获取要显示的单元格时调用的方法。我不认为你应该自己打电话。相反,您可以使用tableView.CellAt(indexPath),因此请尝试将以上行替换为:

var cell = tableView.CellAt(indexPath) as CustomTableCellWithImage;