title: RecyclerView IndexOutOfBoundsException
body: <p>Why exception execute when I removed some items in <code>RecyclerView</code> by using loop ?
  I used <code>Collentions.synchronizedMap</code> in adapter and 'deleteItem method' use synchronized too (the method in fragment). </p>
  
  <pre><code>public void elementController(JsonObject jsonObject , String type)   {
      if ( jsonObject == null || type == null )    {
          return;
      }
  
      int position =0 , resultPosition =0;
      if ( type.equals("update") || type.equals("delete"))    {
  
          String id = jsonObject.get(ELEMENT_ID).getAsString();
          Map&lt;String , Element&gt; map = gridFragment.getMap();
  
          synchronized (map) {  
              for (String s : map.keySet()) {
                  if (s.equals(id)) {
                      resultPosition = position;
                  } else {
                      position++;
                  }
              }
          }
      }
  
      if(position-1 &gt; gridFragment.getmAdapter().getData().size() || position &lt;0)   {
          return;
      }
      switch (type)   {
          case "add":
              if (gridFragment.addElement(MyJsonParser.ElementParse(jsonObject),0)){
                  LogUtils.logDebug(TAG,"add end");
              }
              break;
          case "update":
              if(gridFragment.updateElement( updateParser(jsonObject),resultPosition)){
                  LogUtils.logDebug(TAG,"update end");
              }
              break;
          case "delete":
              if(gridFragment.deleteElement(jsonObject.get(ELEMENT_ID).getAsString(),resultPosition)){
                  LogUtils.logDebug(TAG,"delete end");
              }
              break;
      }
  }
  </code></pre>
  
  <hr>
  
  <pre><code>public boolean deleteElement(final String id , final int position){
      new Thread(new Runnable() {
          @Override
          public void run() {
              getActivity().runOnUiThread(new Runnable(){
                  @Override
                  public void run() {
                      synchronized (map) {
                          map.remove(id);
                          mAdapter.setData(map);
                          mAdapter.notifyItemRemoved(position);
                      }
                  }
              });
          }
      }).start();
  
      return true;
  } 
  </code></pre>
  
  <p>My error Log:</p>
  
  <pre><code>java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 0(offset:0).state:4
          at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3382)
          at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3340)
          at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1810)
          at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:356)
          at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1269)
          at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:523)
          at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:151)
          at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:1942)
          at android.support.v7.widget.RecyclerView.resumeRequestLayout(RecyclerView.java:1171)
          at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:167)
          at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
          at android.view.Choreographer.doCallbacks(Choreographer.java:574)
          at android.view.Choreographer.doFrame(Choreographer.java:543)
          at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
          at android.os.Handler.handleCallback(Handler.java:733)
          at android.os.Handler.dispatchMessage(Handler.java:95)
          at android.os.Looper.loop(Looper.java:212)
          at android.app.ActivityThread.main(ActivityThread.java:5137)
          at java.lang.reflect.Method.invokeNative(Native Method)
          at java.lang.reflect.Method.invoke(Method.java:515)
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:718)
          at dalvik.system.NativeStart.main(Native Method)
  </code></pre>
  
  <p>device not found</p>