2017-05-16 15 views
0

私はgridlayoutmanager.Iでカードビューを持っています。スワイプで実装されています。つまり、カードをスワイプすると、私のアプリケーションはうまくいきました。パフォーマンスを向上させる新しいスレッド。 私がそれをやったとき、カードは取り除かれていますが、2〜3秒後に再び表示されます。最初に カードをスワイプすると、解散し、次のカードが表示されます。新しいRunnableスレッドカードでスワイプした後に削除されない

マイコード:

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); 

答えて

0

使用runOnUiThread()メソッドを参照して下さい。

private class ReceiverThread extends Thread { 
@Override 
public void run() { 
Activity_name.this.runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
      mAdapter.notifyDataSetChanged(); 
     } 
    }); 
} 

他のスレッドからUIのビューをタッチすることはできません。あなたの問題では、AsyncTask、runOnUiThread、またはハンドラのいずれかを使用できます。

0

あなたが唯一のメインスレッド(UIスレッド)にadapter.notifyDataSetChanged()を呼び出す必要があります。

は非UIスレッドからUIアクションを実行するために、このSO thread

関連する問題