我的mainactivity使用两种类型的片段:
com.google.android.gms.maps.supportmapfragment
以及
com.ankitshubham97.myapp.notiffragment。
为了 com.google.android.gms.maps.SupportMapFragment
, android.support.v4.app.Fragment
是需要的,但是 com.ankitshubham97.myapp.NotifFragment
, android.app.Fragment
是需要的。我不能两个都导入。有什么好办法解决这个问题吗?我已经研究了如何混合使用android.support.v4.app.fragment和android.app.fragment以及android,使用getfragmentmanager和getsupportfragmentmanager会导致重叠,但是它们有点老了,除了前面的链接中建议的以外,如果有人有一个整洁的解决方案的话。
下面是我的activity.xml的片段声明部分:
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
</fragment>
<fragment
android:id="@+id/notif"
android:name="com.ankitshubham97.myapp.NotifFragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
</fragment>
</FrameLayout>
my mainactivity.java的oncreate函数(有错误):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
notifFragment = getFragmentManager().findFragmentById(R.id.notif);
getFragmentManager().beginTransaction().hide(notifFragment);
mapFragment.getMapAsync(this);
navigation = (AHBottomNavigation) findViewById(R.id.navigation);
AHBottomNavigationItem item1 = new AHBottomNavigationItem(R.string.title_home, R.drawable.ic_home_black_24dp, R.color.colorBottomNavigationPrimary);
AHBottomNavigationItem item2 = new AHBottomNavigationItem(R.string.title_dashboard, R.drawable.ic_dashboard_black_24dp, R.color.colorBottomNavigationPrimary);
AHBottomNavigationItem item3 = new AHBottomNavigationItem(R.string.title_notifications, R.drawable.ic_notifications_black_24dp, R.color.colorBottomNavigationPrimary);
navigation.addItem(item1);
navigation.addItem(item2);
navigation.addItem(item3);
navigation.setOnTabSelectedListener(new AHBottomNavigation.OnTabSelectedListener() {
@Override
public boolean onTabSelected(int position, boolean wasSelected) {
FragmentManager sfm = getSupportFragmentManager();
FragmentTransaction sft= sfm.beginTransaction();
switch (position) {
case 0:
Log.d(TAG,(mapFragment==null)+"");
sft.show(mapFragment);
ft.hide(notifFragment);
sft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
sft.commit();
Toast.makeText(getApplicationContext(),R.string.title_home,Toast.LENGTH_SHORT).show();
return true;
case 1:
sft.hide(mapFragment);
ft.show(notifFragment);
sft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
sft.commit();addToBackStack(null).commit();
Toast.makeText(getApplicationContext(),R.string.title_dashboard,Toast.LENGTH_SHORT).show();
return true;
case 2:
Toast.makeText(getApplicationContext(),R.string.title_notifications,Toast.LENGTH_SHORT).show();
navigation.setNotification("",2);
spEditor.putInt(NOTIFCOUNT,0);
spEditor.apply();
return true;
}
return true;
}
});
}
2条答案
按热度按时间r8uurelv1#
在使用“fragment”的地方,使用包含包的特定类。因此,根据具体情况,将“fragment”替换为“android.support.v4.app.fragment”或“android.app.fragment”。
这能解决你的问题吗?
uqcuzwp82#
我发现了问题。
NotifFragment
类扩展android.support.v4.app.Fragment
所以我不得不使用getSupportFragmentManager().findFragmentById(R.id.notif);
而不是getFragmentManager().findFragmentById(R.id.notif);
. 同样在进口方面,我不得不使用android.support.v4.app.*
而不是android.app.*