Android中使用FragmentTransaction对象的add方法后应用闪退

想在activity中进行fragment的设置和替换。setDefaultFragment()方法中,使用transaction.add(R.id.layFrame, MapsFragment.newInstance("map","map"));
语句则应用闪退。注释掉此语句则正常运行。

应用截图

图片描述

xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="com.example.tourguide.activity.MainActivity">

<FrameLayout android:id="@+id/layFrame"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1" />

<com.ashokvarma.bottomnavigation.BottomNavigationBar

android:id="@+id/bottom_navigation_bar"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="bottom" />

</LinearLayout>

Activity

public class MainActivity extends AppCompatActivity

implements BottomNavigationBar.OnTabSelectedListener{

private ArrayList<Fragment> fragments;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//底部导航栏对象

BottomNavigationBar bottomNavigationBar

= (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);

//设置样式、颜色

bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);

bottomNavigationBar

.setActiveColor(R.color.colorPrimary)

.setInActiveColor("#FFFFFF")

.setBarBackgroundColor("#ECECEC");

//添加导航项

bottomNavigationBar

.addItem(new BottomNavigationItem(R.drawable.ic_location_on_white_24dp, "Location"))

.addItem(new BottomNavigationItem(R.drawable.ic_tracks_on_white_24dp, "Tracks"))

.setFirstSelectedPosition(0)

.initialise();

//获取fragment列表,设定默认fragment

fragments = getFragments();

setDefaultFragment();

//监听

bottomNavigationBar.setTabSelectedListener(this);

}

private ArrayList<Fragment> getFragments() {

ArrayList<Fragment> fragments = new ArrayList<>();

fragments.add(MapsFragment.newInstance("Map","Map"));

fragments.add(TracksFragment.newInstance(3));

return fragments;

}

private void setDefaultFragment(){

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

transaction.add(R.id.layFrame, MapsFragment.newInstance("map","map"));

transaction.addToBackStack(null);

transaction.commit();

}

@Override

void init() {

}

@Override

public void onTabSelected(int position) {

}

@Override

public void onTabUnselected(int position) {

}

@Override

public void onTabReselected(int position) {

}

}

回答:

解决了,原来是fragment中有OnFragmentInteraction接口,而activity中未implement

以上是 Android中使用FragmentTransaction对象的add方法后应用闪退 的全部内容, 来源链接: utcz.com/p/169329.html

回到顶部