Java 在新的可运行线程中,刷卡后卡不会被移除
我在gridlayoutmanager中有卡片视图。我在刷卡时实现了刷卡ie。我的应用程序运行良好,直到我将代码放入新线程以提高性能。 当我这么做的时候,卡被移除了,但它在2-3秒后再次出现。 最初,当我刷卡时,卡会被取消,下一张卡会出现 我的代码:Java 在新的可运行线程中,刷卡后卡不会被移除,java,android,multithreading,Java,Android,Multithreading,我在gridlayoutmanager中有卡片视图。我在刷卡时实现了刷卡ie。我的应用程序运行良好,直到我将代码放入新线程以提高性能。 当我这么做的时候,卡被移除了,但它在2-3秒后再次出现。 最初,当我刷卡时,卡会被取消,下一张卡会出现 我的代码: ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.UP )
ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.UP )
{
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target)
{
Toast.makeText(getApplicationContext(), "on Move", Toast.LENGTH_SHORT).show();
return false;
}
@Override
public void onSwiped(final RecyclerView.ViewHolder viewHolder, int swipeDir)
{
Toast.makeText(getApplicationContext(), "Task Status changed to COMPLETE", Toast.LENGTH_LONG).show();
new Thread(new Runnable() {
@Override
public void run() {
String username = getIntent().getStringExtra("username");
String password = getIntent().getStringExtra("password");
try {
restApi=new RallyRestApi(new URI("https://rally1.rallydev.com"),username,password);
JsonObject updatedValues = new JsonObject();
updatedValues.addProperty("State", "Completed");
UpdateRequest taskUpdate = new UpdateRequest(data_list.get(viewHolder.getAdapterPosition()).getRef(), updatedValues);
restApi.update(taskUpdate);
data_list.remove(viewHolder.getAdapterPosition());
adapter.notifyDataSetChanged();
} catch (URISyntaxException | IOException e) {
e.printStackTrace();
}
}
});
}
};
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
itemTouchHelper.attachToRecyclerView(recyclerView);
您应该只在主线程(UI线程)上调用
adapter.notifyDataSetChanged()
请参阅此使用runOnUiThread()方法从非UI线程执行UI操作
private class ReceiverThread extends Thread {
@Override
public void run() {
Activity_name.this.runOnUiThread(new Runnable() {
@Override
public void run() {
mAdapter.notifyDataSetChanged();
}
});
}
您不能从其他线程接触UI的视图。对于您的问题,您可以使用AsyncTask、runOnUiThread或handler