【问题标题】:How to set a default fragment shown in the main activity?如何设置主活动中显示的默认片段?
【发布时间】:2017-09-10 23:54:56
【问题描述】:

所以我今天遇到了一个小问题。我在我的应用程序中制作了一个底部导航视图,单击按钮后,它会替换屏幕上的片段(并且效果很好!)。 但是刚刚启动应用程序,并且没有单击任何按钮,屏幕上没有片段。 我意识到只有在单击按钮后才会显示片段,并且我想要一个默认片段(kalkulatorFragment)。 我一直在努力以某种方式设置它,但没有成功......

    public class Main extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
}

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();

    kalkulatorFragment kalkulator_fragment = new kalkulatorFragment();
    wzoryFragment wzory_fragment = new wzoryFragment();
    definicjeFragment definicje_fragment = new definicjeFragment();

        switch (item.getItemId()) {
            case R.id.kalkulator:
                ft.replace(android.R.id.content, kalkulator_fragment);
                ft.commit();
                return true;

            case R.id.wzory:
                ft.replace(android.R.id.content, wzory_fragment);
                ft.commit();
                return true;

            case R.id.definicje:
                ft.replace(android.R.id.content, definicje_fragment);
                ft.commit();
                return true;
        }
        return false;
    }
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:design="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/linear"
android:layout_width="match_parent"
android:layout_height="match_parent">

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/definicjeFragment"
        android:name="com.thegodofcoding.adamgreloch.ultracalcalpha.definicjeFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        tools:layout="@layout/definicje_view" />

    <fragment
        android:id="@+id/wzoryFragment"
        android:name="com.thegodofcoding.adamgreloch.ultracalcalpha.wzoryFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        tools:layout="@layout/wzory_view" />

    <fragment
        android:id="@+id/kalkulatorFragment"
        android:name="com.thegodofcoding.adamgreloch.ultracalcalpha.kalkulatorFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        tools:layout="@layout/kalkulator_view" />
</FrameLayout>


<android.support.design.widget.BottomNavigationView
    android:id="@+id/navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="@color/bottomNavBar"
    android:layout_alignParentBottom="true"
    design:menu="@menu/bottom_nav_items" />

谢谢:)

【问题讨论】:

    标签: java android android-studio android-fragments bottomnavigationview


    【解决方案1】:

    好的,我刚刚想通了。 我将 ft.replace 移至 onCreate() 方法,因此 kalkulatorFragment 将在创建 Activity 后立即显示。

    public class Main extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        kalkulatorFragment kalkulator_fragment = new kalkulatorFragment();
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
    
        ft.replace(android.R.id.content, kalkulator_fragment);
        ft.commit();
    
        BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
    }
    

    【讨论】:

      【解决方案2】:

      你需要使用OnCreate方法的这段代码OUTSIDE

      navigation.setSelectedItemId(R.id.IdOFYourItemFromBottomNavigationMenuItems);

      我不知道为什么,但它不会在 OnCreate 方法中工作。您可以在 OnCreate 方法中声明和初始化它,只是不能在其中设置默认项。

      就我而言,我在 OnCreateOptionsMenu 中使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-13
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多