2016-01-01 54 views
1

在某些情況下,我想在我的抽屜式導航(帶RecyclerView建)作爲選擇,通過我的腳本來設置特定項目的頂部。所以我用下面滾動到以回收視圖

recyclerView.findViewHolderForPosition(1).itemView.performClick(); 

的問題是,當預期的產品不在視口(說有人向下滾動到導航抽屜的底部)的代碼,它給NullPointerException(我想這是預期的行爲,因爲該項目被回收)。

任何人都可以請建議我該怎麼辦?我想的一種方法是在調用上述函數之前自動滾動到頂部,但我不確定這是否可行。任何幫助將不勝感激。

+0

你有一種布爾變量,表示如果選擇與否的項目,等設置和調用'notifyItemChanged(INT位置)'或'notifyDataSetChanged()' – pskink

回答

0

如果我理解正確的話,你想要設置RecycleView的選定項目。你可以用這種方式改變你RecyclerView.Adapter

class YourModel{ 
    public boolean isSelected; 
} 


public class CustomRecycleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ 

    List<YourModel> listData; 

    // your View Holder 
    class ViewHolder extends RecyclerView.ViewHolder{ 
     public View rootLayout; // your root item layout 
     public ContentViewHolder(View itemView) { 
     // get root layout 
     } 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { 
     ViewHolder viewHolder = (ViewHolder)holder; 
     if(listData.get(position).isSelected{ 
      // set selected like this: 
      viewHolder.rootLayout.setSelected(true); 
     }else{ 
      viewHolder.rootLayout.setSelected(false); 
     } 
    } 

    public void setSelected(int position, boolean isSelected){ 
    listData.get(position).isSelected = isSelected; 
    notifyDataSetChanged(); 
    } 
} 

最後,在活動中使用此代碼:

CustomRecycleAdapter recycleAdapter; // init it 
recycleAdapter.setSelected(0, true); 
在模型中
+0

謝謝..我試過這種方式,但問題是setSelected()方法不能從我的活動訪問。這裏recycleAdapter是一個RecyclerView.Adapter對象,對嗎? – abdfahim

0

你是正確findViewHolderForPosition,則返回null觀點持有者不可用(它的屏幕外 - 再生)。在這種情況下,你可以不做任何事情。該視圖將顯示新的外觀,當它被滾動到視圖用戶和您綁定在該點稱爲(在此之前,該項目的視覺外觀並不重要...)

+0

對不起,我不清楚。如果我不叫做performClick,抽屜物品的外觀,不會改變(通常是文字爲黑色,如果有人點擊任何項目,表示該活動項目也將變爲藍色)。 – abdfahim

相關問題