选择要在Activity中显示的特定片段?

时间:2017-08-13 20:05:52

标签: java android android-fragments

我试图修改此应用的代码:https://github.com/udacity/ud839_ViewPager_Example/tree/quiz 使MainActivity在开始时显示TuesdayFragment而不是MondayFragment。

我想学习如何选择Activity在启动时显示的特定fragment.java文件。

你们中的一些人可能没有时间检查github上的代码,所以这里是:

MainActivity.java

package com.example.android.viewpager;

import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;

/**
 * Displays a {@link ViewPager} where each page shows a different day of the week.
 */
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Set the content of the activity to use the activity_main.xml layout file
        setContentView(R.layout.activity_main);

        // Find the view pager that will allow the user to swipe between fragments
        ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);

        // Create an adapter that knows which fragment should be shown on each page
        SimpleFragmentPagerAdapter adapter = new SimpleFragmentPagerAdapter(getSupportFragmentManager());

        // Set the adapter onto the view pager
        viewPager.setAdapter(adapter);
    }
}

及其布局 activity_main.xml 文件:

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

<!-- Layout for the main screen -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.android.viewpager.MainActivity">

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

TuesdayFragment.java,WednesdayFragment.java和 MondayFragment.java 非常相似,只是使用不同的layouts.xml,它显示不同的星期几文本:

package com.example.android.viewpager;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * Fragment that displays "Monday".
 */
public class MondayFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_monday, container, false);
    }
}

并且有一个 SimpleFragmentPagerAdapter.java:

package com.example.android.viewpager;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

/**
 * Provides the appropriate {@link Fragment} for a view pager.
 */
public class SimpleFragmentPagerAdapter extends FragmentPagerAdapter {

    public SimpleFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        if (position == 0) {
            return new MondayFragment();
        } else if (position == 1){
            return new TuesdayFragment();
        } else {
            return new WednesdayFragment();
        }
    }

    @Override
    public int getCount() {
        return 3;
    }
}

我正在阅读有关片段和事务以及使用事务和替换的尝试,试图强制在MainActivity的开头显示TuesdayFragment,其中包含以下想法:

getSupportFragmentManager().beginTransaction().replace(R.id.viewpager, TuesdayFragment).commit();

但没有任何效果。

问题:有人可以这么善良并告诉我需要修改/添加哪些代码,以便MainActivity能够以我想要的任何片段开始吗?现在它始终以MondayFragment开头。

我被卡住了,所以即使把我推向正确的方向,也会非常感激。

1 个答案:

答案 0 :(得分:2)

设置适配器后,可以在onCreate方法中调用此方法:

viewPager.setCurrentItem(indexOfItemYouWantToDisplay)

默认为0时,显示MondayFragment。将其设置为1,将显示TuesdayFragment。