在某种情况下,我想制作一个HashMap
,其中键是片段,值是整数。但是,每个不同的片段都有不同的类型,而不仅仅是Fragment
类型。所以以下(这是我最初尝试过的)不起作用:
HashMap<Fragment, Integer> hmap = new HashMap<>();
hmap.put(new ExampleFragment(), 5);
hmap.put(new AnotherFragment(), 2);
现在这当然不会起作用,因为ExampleFragment
和AnotherFragment
不是正确的类型放在HashMap
。
编辑:我在AndroidStudio中收到以下错误:Wrong 1st argument type. Found: 'com.example.sword.rpg.ExampleFragment', required: 'android.app.Fragment'
现在我的问题是:如何在同一个Fragment
(或HashMap
)中存储不同的ArrayList
子类,这是否可能?
对于我的具体情况,我确实有一个解决方法,但它并不像这个那样整洁。所以我仍然很好奇。
编辑:我确实混淆了Fragment
和android.support.v4.app.Fragment
,谢谢:)
对于你的问题,它应该可以工作,因为你可以混淆你的“片段”类型吗?在典型的android命名空间中有一些(例如android.app.Fragment vs 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}