2017-08-25 49 views
1

下面我給出了一個簡短的示例代碼。但我正在使用這種切換方式來處理不同視圖上的點擊事件。對於每一種情況,我需要在繼續之前檢查課程的實例。如何在Android中動態地投射類的實例

public class OnResetListener implements View.OnClickListener { 

    private ViewHolder oHolder; 

    OnResetListener(ViewHolder holder) { 
     oHolder = holder; 
    } 

    @Override 
    public void onClick(View v) { 

     if(oHolder instanceof FolderVH){ 

      ((FolderVH) oHolder).viewPager.setCurrentItem(0, true); 

     } else if(oHolder instanceof NoteVH) { 

      ((NoteVH) oHolder).viewPager.setCurrentItem(0, true); 

     } else if(oHolder instanceof CheckListVH) { 

      ((CheckListVH) oHolder).viewPager.setCurrentItem(0, true); 
     } 
    } 
} 

這裏的類都是從RecyclerView.ViewHolder延伸並命名爲FolderVHNoteVHCheckListVH。所有這些擴展類都具有完全相同的結構但具有不同的值分配。

有沒有一種方法,我可以動態地投類的實例...說喜歡

if(oHolder instanceof FolderVH) oHolder = ((FolderVH) oHolder);

,然後我簡單地使用在以往任何時候需要oHolder

回答

1

你可以把所有三個FolderVHNoteVHCheckListVH擴展公共基類,說ViewPagerVH,其中包含viewPager領域:

然後,你可以檢查這樣的:

if (oHolder instanceof ViewPagerVH) { 
    ((ViewPagerVH) oHolder).viewPager.setCurrentItem(0, true); 
} 
+0

如何從'FolderVH','NoteVH'或'CheckListVH'在'ViewPagerVH'中爲'viewPager'賦值? – kanudo

+0

照常使用'viewPager = ...;'。你應該真的瞭解Java的繼承,這是非常重要的。 – Thomas

+0

當然@Thomas。其實現在正在工作相同:)順便謝謝你的答案。它的工作....只是在更多的問題。直接像'viewPager = ...;'或通過調用方法一樣直接賦值是一種好的做法嗎?比如'setViewPager(viewPager);' – kanudo

1

如果你所有的viewHolder具有相同的結構,我會concider創建一個擴展RecyclerView.ViewHolder的父類(我們稱之爲「ParentViewHolder」)。然後你的viewHolders應該擴展你的「ParentViewHolder」。 最後,您始終可以將oHolder投影到「ParentViewHolder」類,並且所有內容都應該可以工作。 希望我明白並回答你的問題。 :)