在 Recyclerview 列表中闪烁

Blinking in Recyclerview list

我正在制作记分牌应用程序,它运行良好,但小问题是记分牌在闪烁

举个例子:

Shikhar Dhawan 86 (126)

罗希特夏尔马 20(20)

整个列表以 ms(毫秒)为单位闪烁

这是一个短代码:

public class handleBetTask extends AsyncTask<JSONObject, Void, Void> {
    @Override
    protected Void doInBackground(JSONObject... voids) {
        try {
            JSONObject response = voids[0];
            JSONArray dataArray = response.getJSONArray("Data");
            if (dataArray.length() > 0) {
                        groupWiseScoreGenerate(dataArray);
                    } else {
                        matchedScoreGroup.clear();//Here matchedScoreGroup is ArrayList
            }
    }
}

现在 groupWiseScoreGenerate(dataArray):

private void groupWiseScoreGenerate(JSONArray array) {
    matchedScoreGroup.clear();
    //Here is a data insertion in matchedScoreGroup
     runOnUiThread(new Runnable() {
                @Override
                public void run() {

        MatchedScoreFragment.getInstance().setMatchedScoreGroup(matchedScoreGroup);//where it is bind to recyclerview
    }

MatchedScoreFragment(片段)中设置分数。

public void setMatchedScoreGroup(ArrayList<Match> matchedScoreGroup) {
    try {

        if (matchedScoreGroup.size() > 0) {
            if (txtEmptyView.isShown()) {
                txtEmptyView.setVisibility(View.GONE);
            }
            mRecyclerView.setVisibility(View.VISIBLE);
            this.matchedScoreGroup= matchedScoreGroup;
            adapter.notifyDataChanged(this.matchedScoreGroup);
        } else {
            mRecyclerView.setVisibility(View.GONE);
            txtEmptyView.setVisibility(View.VISIBLE);
        }
    }catch (Exception e){
        e.printStackTrace();
    }
}

它运行良好,但 它每 200 毫秒调用一次,因此在显示分数时会发生闪烁,即 txtEmptyView.setVisibility(View.VISIBLE);调用和计分板消失了几毫秒。我刚刚展示了有限的代码,但你会很容易地得到完成的事情

问题可能是因为 runOnUiThread。 感谢您的帮助谢谢。

问题是 doInBackground() 被调用得太快并且在 UiThread 可以处理 Runnable 之前清除 "matchedScoreGroup" 数组。所以解决方案是:(1)在这里声明 "ArrayList<> doInBackground()" 和 return 你的 converted/filled ArrayList (2)创建 "AsyncTask.onPostExecute(ArrayList<>)" 方法和 运行 你的 "MatchedScoreFragment.getInstance().setMatchedScoreGroup()" 从那里