2017-02-20 167 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); ? –