有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在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


共 (2) 个答案

  1. # 1 楼答案

    您可以让所有三个FolderVHNoteVHCheckListVH扩展一个公共基类,比如ViewPagerVH,它包含viewPager字段:

    class ViewPagerVH extends RecyclerView.ViewHolder {
      public ViewPager viewPager;
    }
    
    class FolderVH extends ViewPagerVH { ... }
    // etc.
    

    然后你可以这样检查:

    if (oHolder instanceof ViewPagerVH) {
      ((ViewPagerVH) oHolder).viewPager.setCurrentItem(0, true);
    }
    
  2. # 2 楼答案

    如果所有的视图持有者都有相同的结构,我会创建一个扩展RecyclerView的父类。ViewHolder(我们称之为“ParentViewHolder”)。然后你的视图持有者应该扩展你的“ParentViewHolder”。 最后,你可以把oHolder加入“ParentViewHolder”类,一切都应该正常。 希望我能理解并回答你的问题。:)