Java 包含不同片段的HashMap(或ArrayList)

Java 包含不同片段的HashMap(或ArrayList),java,android,android-fragments,hashmap,Java,Android,Android Fragments,Hashmap,对于特定情况,我想制作一个HashMap,其中键是片段,值是整数。然而,每个不同的片段都有不同的类型,而不仅仅是Fragment类型。因此,以下内容(我最初尝试的内容)不起作用: HashMap<Fragment, Integer> hmap = new HashMap<>(); hmap.put(new ExampleFragment(), 5); hmap.put(new AnotherFragment(), 2); HashMap hmap=newhashmap(

对于特定情况,我想制作一个
HashMap
,其中键是片段,值是整数。然而,每个不同的片段都有不同的类型,而不仅仅是
Fragment
类型。因此,以下内容(我最初尝试的内容)不起作用:

HashMap<Fragment, Integer> hmap = new HashMap<>();
hmap.put(new ExampleFragment(), 5);
hmap.put(new AnotherFragment(), 2);
HashMap hmap=newhashmap();
put(新的ExampleFragment(),5);
放置(新的另一个片段(),2);
现在这当然行不通了,因为
ExampleFragment
AnotherFragment
不是要放入
HashMap
的正确类型
编辑:我在AndroidStudio中遇到以下错误:
错误的第一个参数类型。找到:“com.example.swarm.rpg.ExampleFragment”,必需:“android.app.Fragment”

现在我的问题是:如何在同一个
HashMap
(或者
ArrayList
)中存储
Fragment
的不同子类,这可能吗

对于我的具体情况,我确实有一个变通方法,但它并不像这个方法那样整洁。所以我还是很好奇


编辑:我确实混淆了
Fragment
android.support.v4.app.Fragment
,谢谢:)

对于你的问题,它应该可以工作,就像这样,那么你是否可能混淆了“Fragment”类型?在典型的android名称空间中有几个(例如android.app.Fragment与android.support.v4.app.Fragment):


也许你应该使用HashMap-hmap,它不确定你为什么要实现它,但是你可以只做
HashMap
hmap.put(“ExampleFragment”,5)@nongthonbamthoi这确实是我的解决方法。但是,当从这个HashMap中选取一个随机片段时,这需要一些额外的逻辑,每个片段都有一个if语句(或switch case)。这感觉不太整洁,也使添加更多片段变得不友好。您可以存储子类,但是如果您的子类中有新方法,这些方法不会覆盖super
Fragment
类,您将无法使用它们,除非您显式向下转换,如果您不正确地施法,可能会导致
ClassCastException
。这同样适用于
FragmentManager::getFragmentbyId
——它只有一个内部
映射
Hm,这很有趣。当我尝试这样做时,在Android Studio中会出现以下错误:
'com.example.swarm.rpg.ExampleFragment',必选:'Android.app.Fragment'
。这可能是因为我的片段声明吗?是的,这以一种模糊的方式告诉我,您的“ExampleFragment”与HashMap声明中的类型不同。同样,小心不要只使用“Fragment”-因此在导入中验证您的完全限定名。(在我自己的测试中,我将ExampleFragment更改为“android.support.v4.app.Fragment”,其他内容保持不变,并复制与您提到的相同的错误-因此听起来好像您在混合片段引用。使用您想要的任何片段父类型;它们只需要是相同的父类型。我确实混合了
Fragment
android.support.v4.app.Fragment
,谢谢:)
import android.app.Fragment;
import android.util.Log;
import java.util.HashMap;

public class TestHashMap {

      private HashMap<Fragment, Integer> test = new HashMap<>();

      public static class ExampleFragment extends Fragment {
          public ExampleFragment() { super(); }
          public String toString() { return "ExampleFragment[hash:"+hashCode()+"]"; }
          public void someOtherMethod() {}
      }

      public static class AnotherFragment extends Fragment {
          public AnotherFragment() { super(); }
          public String toString() { return "AnotherFragment[hash:"+hashCode()+"]"; }
      }

      public void test() {
          test.put(new ExampleFragment(),1);
          test.put(new AnotherFragment(),2);
          Log.d("TestHashMap","size = "+test.size());
          Log.d("TestHashMap",test.toString());
      }
  }
D/TestHashMap: size = 2
D/TestHashMap: {AnotherFragment[hash:230309272]=2, ExampleFragment[hash:5536635]=1}