在 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()" 从那里
我正在制作记分牌应用程序,它运行良好,但小问题是记分牌在闪烁
举个例子:
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()" 从那里