我在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>
处理这种情况的正确解决办法是什么?