我可以在另一个片段中有一个片段,或者更好地处理它作为" parallel"片段到activity_main.xml布局?

时间:2016-06-29 17:16:59

标签: java android android-layout android-fragments android-viewpager

我在Android开发方面绝对是新手,我对片段有以下疑问。

所以我从这个官方示例开始创建一个使用 ViewPager 组件的屏幕幻灯片:https://developer.android.com/training/animation/screen-slide.html

它工作正常,我已经调整了前面的示例,创建了一个更复杂的布局/ fragment_screen_slide_page.xml 布局文件,这个文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="0dp">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="fill_parent"
        android:scaleType="fitXY"
        android:layout_height="250dp" />
        <!--
        android:src="@drawable/carbonara"/>
        android:background="@drawable/carbonara" />
        -->


    <TextView android:id="@android:id/text1"
        style="@style/pastaTitleTextStyle" />


</LinearLayout>

因此它基本上包含此图像下的标题图像和描述性文本。向右滚动\左图像和描述性文本更改,这由此类处理:

/**
 * A fragment representing a single step in a wizard. The fragment shows a dummy title indicating
 * the page number, along with some dummy text.
 *
 */
public class ScreenSlidePageFragment extends Fragment {

    private static final String TAG = "ScreenSlidePageFragment";
    /**
     * The argument key for the page number this fragment represents.
     */
    public static final String ARG_PAGE = "page";

    /**
     * The fragment's page number, which is set to the argument value for {@link #ARG_PAGE}.
     */
    private int mPageNumber;

    /**
     * Factory method for this fragment class. Constructs a new fragment for the given page number.
     */
    public static ScreenSlidePageFragment create(int pageNumber) {
        ScreenSlidePageFragment fragment = new ScreenSlidePageFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_PAGE, pageNumber);
        fragment.setArguments(args);
        return fragment;
    }

    public ScreenSlidePageFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mPageNumber = getArguments().getInt(ARG_PAGE);
    }

    /**
     * Method that will be called when the "pasta slider" is slided right or left
     * @param inflater
     * @param container
     * @param savedInstanceState
     * @return
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

       System.out.println("PAGE NUMBER: "+ mPageNumber + 1);

        // Obtain the colosseum_icon.png from the rsources as a Drawable:
        //Drawable drawable = getResources().getDrawable(R.drawable.colosseum_icon);

        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_screen_slide_page, container, false);
        ImageView imgSlideView = (ImageView) rootView.findViewById(R.id.imageView1);

        switch (mPageNumber + 1) {

            case 1:
                imgSlideView.setImageResource(R.drawable.carbonara);
                ((TextView) rootView.findViewById(android.R.id.text1)).setText(getString(R.string.carbonara));
                break;

            case 2:
                imgSlideView.setImageResource(R.drawable.amatriciana);
                ((TextView) rootView.findViewById(android.R.id.text1)).setText(getString(R.string.amatriciana));
                break;

            case 3:
                imgSlideView.setImageResource(R.drawable.gricia_m);
                ((TextView) rootView.findViewById(android.R.id.text1)).setText(getString(R.string.gricia));
                break;

            case 4:
                imgSlideView.setImageResource(R.drawable.cacio_e_pepe);
                ((TextView) rootView.findViewById(android.R.id.text1)).setText(getString(R.string.cacio_e_pepe));
                break;

            case 5:
                imgSlideView.setImageResource(R.drawable.ajo_ojo_e_peperoncino);
                ((TextView) rootView.findViewById(android.R.id.text1)).setText(getString(R.string.ajo_ojo_peperoncino));
                break;

            default:
                imgSlideView.setImageResource(R.drawable.carbonara);
                ((TextView) rootView.findViewById(android.R.id.text1)).setText(getString(R.string.carbonara));
        }

        //imgSlideView.setImageResource(R.drawable.carbonara);

        // Set the title view to show the page number.
        //((TextView) rootView.findViewById(android.R.id.text1)).setText(getString(R.string.title_template_step, mPageNumber + 1));

        return rootView;
    }

    /**
     * Returns the page number represented by this fragment object.
     */
    public int getPageNumber() {
        return mPageNumber;
    }
}

我工作正常。

所以基本上它用于选择烹饪食谱:向右滚动\左边用户选择一个特定的食谱和 TextView 的文字 android:id =&#34; @ android:id / text1&#34; 是当前的食谱名称。

现在我必须实施配方指令,在这里我对如何正确实现我的想法有所怀疑。

我正在考虑实施类似&#34;嵌套&#34;配方步骤幻灯片。

因此应用程序以这种方式工作:

1)首先,用户选择向右滚动的特定配方\离开已实施的 ViewPager (正如在上一篇文章中所做的那样)。

2)然后,用户可以再次滚动到该片段中以查看所选配方的各种烹饪步骤(例如:步骤1:成分列表,步骤2:如何烹饪,步骤3:如何呈现在桌子上)。

所以现在我的疑问是:我可以在我的 layout / fragment_screen_slide_page.xml 布局文件中插入类似新片段的内容,如下所示:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/stepsPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

或者这不是一个好的解决方案,我必须将此元素放在第一个 ViewPager 组件(用于选择的组件)下的 activity_main.xml 主要活动布局中配方)并通过Java代码处理内容?所以在 activity_main.xml 文件中执行类似的操作:

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

<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.pastafromrome.MainActivity">

    <!-- This is used to select the recipe: -->
    <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!-- This show the steps of the selected recipe: -->
    <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/stepsPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

处理这种情况的正确解决办法是什么?

0 个答案:

没有答案