在android中使用viewpager时在片段之间传递值

时间:2014-09-23 06:17:08

标签: java android

我想创建一个注册表单,其中表单被分成三个片段。片段中有一个下一个按钮,导致viewpager移动到下一个片段。但是我想在片段之间传递值如何我这样做了吗?

主要班级:

package pl.looksok.viewpagerdemo;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;

public class MainActivity extends FragmentActivity {
    ViewPager pager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MyPagerAdapter pageAdapter = new MyPagerAdapter(getSupportFragmentManager());
         pager = (ViewPager)findViewById(R.id.myViewPager);
        pager.setAdapter(pageAdapter);



    }
    public void selectFragment(int position){
    pager.setCurrentItem(position, true); 
    // true is to animate the transaction
    }
}

第一个片段:

package pl.looksok.viewpagerdemo;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

public class FragmentBlue extends Fragment {
Button btnnext1;
RelativeLayout frag1;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_blue, container, false);
        btnnext1=(Button) view.findViewById(R.id.btnnext1);
        frag1=(RelativeLayout) view.findViewById(R.id.frag1);

        btnnext1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {


                ((MainActivity)getActivity()).selectFragment(1);
            }
        });

        return view;
    }
}

第二个片段:

package pl.looksok.viewpagerdemo;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

public class FragmentGreen extends Fragment {
Button btnnext2;
RelativeLayout frag2;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_green, container, false);
        btnnext2=(Button) view.findViewById(R.id.btnnext2);
        frag2=(RelativeLayout) view.findViewById(R.id.frag2);
        btnnext2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {


                ((MainActivity)getActivity()).selectFragment(2);

            }
        });
        return view;
    }
}

第三个片段:

package pl.looksok.viewpagerdemo;

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

public class FragmentPink extends Fragment {
Button btnnext3;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_pink, container, false);
        btnnext3=(Button) view.findViewById(R.id.btnnext3);
        btnnext3.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {


            }
        });
        return view;
    }
}

我会在最后一个片段中放置一个提交按钮,将数据发布到服务器,因此前两个片段中的数据应该在最后一个片段中可用。所以我想知道如何从前两个片段传递数据碎片到最后一个?

我的方法也是实现任务的一种坏方法吗?我会更好地创建三种不同的活动并使用intent和bundle来传递数据吗?

1 个答案:

答案 0 :(得分:0)

您可以使用SharedPreferences。在更改片段之前保存输入的值:

SharedPreferences sp = getSharedPreferences("pref_name", MODE_PRIVATE);
SharedPreferences.Editor editor = mSharedPref.edit();
editor.putString("key", value);
editor.commit();

在其他片段中,当您想要使用保存的值时:

SharedPreferences sp = getSharedPreferences(MainActivity.PREF_NAME, MODE_PRIVATE);
String value = mSharedPref.getString("key", null);

if(value !=null){
//do something with value
}

另一种方法是使用接口回调模式。您可以阅读更多here