2017-02-20 212 views
1

我正在使用RecyclerView来水平滚动项目。当任何项目被点击时,它将被选中并且其背景被改变。我需要的是当选择项目时,它将滚动到中心。第一项将在开始时居中。recycler view center selected item

任何意见,将不胜感激。我的代码在下面,但它不会居中所有项目。

recyclerView.addOnItemTouchListener(
      new RecyclerItemClickListener(getActivity(), recyclerView, new RecyclerItemClickListener.OnItemClickListener() { 
       @Override 
       public void onItemClick(View view, final int position) { 
        // TODO Handle item click 
        editAdapter.setSelection(position); 
        editAdapter.notifyDataSetChanged(); 
        final int scrollX = (view.getLeft() - (center)) + (view.getWidth()/2); 
        new Handler().postDelayed(new Runnable() { 
         @Override 
         public void run() { 
          recyclerView.scrollBy(scrollX, 0); 
         } 
        }, 100); 
       } 

       @Override 
       public void onLongItemClick(View view, int position) { 

       } 
      }) 
    ); 

回答

0
在适配器

创建这样

public interface NotifyPositionChange 
{ 
    public void scrollToPosition(int position); 
} 

一个接口在构造函数用于适配器传递一个额外的参数。当项目在适配器选择这样

notifyPositionChange.scrollToPosition(position); 

接口

public YourAdapter(NotifyPositionChange notifyPositionChange) 
{ 
    this.notifyPosition=notifyPositionChange; 
} 

调用方法传递您的当前位置。 并在您的活动中实现此接口并覆盖其方法。

@Override 
public void scrollToPosition(int position) { 

     yourRecyclerView.getLayoutManager().smoothScrollToPosition(yourRecyclerView, null, position - 1); 
    } 
+0

不适合我 – Cqlsys

+0

发生了什么呢? –

+0

您是否将此作为参数添加到适配器的构造器中 yourdAdapter = new YourAdapter(this); ? –