使用fragment填写连续几个表格页面
来源:互联网 发布:win mac地址查询 编辑:程序博客网 时间:2024/06/06 15:47
常常有这样的需求,有几个连续的表格页面需要填写,而却在最后一个页面一次性提交。当然通过几个activity不断向下传值来实现,也可以只写一个页面通过布局的隐藏与显示来实现。
这里我使用了一个activity加载多个fragment的方法来实现。
先看效果图:
MainActivity:
import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity { private FragmentManager fm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fm = getSupportFragmentManager(); OneFragment oneFragment = new OneFragment(); FragmentTransaction transaction = fm.beginTransaction(); transaction.add(R.id.fragment_container,oneFragment,"OneFragment"); transaction.commit(); } public void turnToTwo(){ OneFragment oneFragment = (OneFragment) fm.findFragmentByTag("OneFragment"); TwoFragment twoFragment = (TwoFragment) fm.findFragmentByTag("TwoFragment"); if (twoFragment==null){ TwoFragment mTwoFragment = new TwoFragment(); FragmentTransaction transaction = fm.beginTransaction(); transaction.setCustomAnimations(R.anim.slide_in_right,R.anim.slide_out_left); transaction.add(R.id.fragment_container, mTwoFragment,"TwoFragment") .hide(oneFragment).commit(); }else { FragmentTransaction transaction = fm.beginTransaction(); transaction.setCustomAnimations(R.anim.slide_in_right,R.anim.slide_out_left); transaction.show(twoFragment).hide(oneFragment).commit(); } } public void turnToThree(){ TwoFragment twoFragment = (TwoFragment) fm.findFragmentByTag("TwoFragment"); ThreeFragment threeFragment = (ThreeFragment) fm.findFragmentByTag("ThreeFragment"); if (threeFragment==null){ ThreeFragment mThreeFragment = new ThreeFragment(); FragmentTransaction transaction = fm.beginTransaction(); transaction.setCustomAnimations(R.anim.slide_in_right,R.anim.slide_out_left); transaction.add(R.id.fragment_container, mThreeFragment,"ThreeFragment") .hide(twoFragment).commit(); }else { FragmentTransaction transaction = fm.beginTransaction(); transaction.setCustomAnimations(R.anim.slide_in_right,R.anim.slide_out_left); transaction.hide(twoFragment).show(threeFragment).commit(); } } @Override public void onBackPressed() { OneFragment oneFragment = (OneFragment) fm.findFragmentByTag("OneFragment"); TwoFragment twoFragment = (TwoFragment) fm.findFragmentByTag("TwoFragment"); ThreeFragment threeFragment = (ThreeFragment) fm.findFragmentByTag("ThreeFragment"); if (threeFragment!=null&&threeFragment.isVisible()){ FragmentTransaction transaction = fm.beginTransaction(); transaction.setCustomAnimations(R.anim.slide_in_left,R.anim.slide_out_right); transaction.hide(threeFragment).show(twoFragment).commit(); }else if (twoFragment!=null&&twoFragment.isVisible()){ FragmentTransaction transaction = fm.beginTransaction(); transaction.setCustomAnimations(R.anim.slide_in_left,R.anim.slide_out_right); transaction.hide(twoFragment).show(oneFragment).commit(); }else { super.onBackPressed(); } }}
主要在onBackPressed中对fragment进行了显示隐藏不销毁的做法,其次当某一个页面加载过一次后再次加载时加载已经存在的页面对象而不是新建新的对象。
几个fragment及布局文件类似,如下:
public class OneFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_one,container,false); view.findViewById(R.id.btn_next).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ((MainActivity)getActivity()).turnToTwo(); } }); return view; }}
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/holo_red_light"> <EditText android:layout_width="match_parent" android:layout_height="40dp" android:layout_margin="40dp" android:layout_centerInParent="true" android:background="@android:color/white"/> <Button android:id="@+id/btn_next" android:layout_width="match_parent" android:layout_height="40dp" android:text="下一页"/></RelativeLayout>
其中还用到了几个xml动画,几个文件如下:
slide_in_left.xml<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="@android:integer/config_mediumAnimTime"/></set>
slide_in_right.xml<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="@android:integer/config_mediumAnimTime"/></set>
slide_out_left.xml<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="@android:integer/config_mediumAnimTime"/></set>
slide_out_right.xml<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="100%p" android:duration="@android:integer/config_mediumAnimTime"/></set>
当你在最后一个页面需要获取前面页面的值时可以先获取前面的fragment对象,再通过该对象(该类提供获取对应值的公共方法)获取对应页面的值。如:((MainActivity)getActivity()).getSupportFragmentManager().findFragmentByTag("OneFragment");获取到fragment栈中的OneFragment。
阅读全文
0 0
- 使用fragment填写连续几个表格页面
- 如何使用ABBYY FineReader 14填写表格
- 如何使用ABBYY FineReader 14填写表格
- 自动填写excel表格
- js实现页面表格内容的复制粘贴填充,实现快速填写
- 使用WebClient自动填写并提交ASP.NET页面表单
- 使用WebClient自动填写并提交ASP.NET页面表单
- 使用WebClient自动填写并提交ASP.NET页面表单
- 使用WebClient自动填写并提交ASP.NET页面表单
- 使用WebClient自动填写并提交ASP.NET页面表单
- 使用JavaScript排列页面表格
- html在同一个页面上几个表格切换
- 利用DWR来自动填写表格
- 使用Fragment控制切换多个页面
- 使用 SharedElement 动画切换 Fragment 页面
- 简单使用Fragment实现页面切换
- 使用BottomTabBar实现类似Fragment页面切换
- 使用jquery修改页面表格中的文字
- 解决myeclipse10中用maven命令然后控制台一直都没有任何显示。
- 第8周项目2 顺序串算法
- 回顾html的常用标签及其属性
- super关键字的应用
- Android设计模式之——抽象工厂模式
- 使用fragment填写连续几个表格页面
- 第7章 Handlebars模板引擎
- android 使用OPENGL ES绘制三角形(一) (顶点方法)
- AndroidStudio分包导致的NoClassDefFoundError解决办法
- 第七周 项目三 负数把正数赶出队列
- 教你如何从一个普通程序员,两年内做到月薪 20 K+
- 对号入座,你是一个合格的程序员吗?
- 程序员的专属表情包,看了吓一跳
- 中国最牛逼的程序员在哪个省?