代码之家  ›  专栏  ›  技术社区  ›  rizkygum

如何使用viewpager从输入数据片段中获取值

  •  0
  • rizkygum  · 技术社区  · 7 年前

    碎片1=编辑文本1,碎片2=编辑文本2,碎片3=编辑文本3&碎片4=按钮保存

    在片段4中,只有一个保存按钮可以从片段1、2和3中检索数据 但当我单击按钮Save时,来自fragment1的数据总是空的

    主要活动:

    public class MainActivity extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new FragmentOne(), "FRAG1");
        adapter.addFragment(new FragmentTwo(), "FRAG2");
        adapter.addFragment(new FragmentThree(), "FRAG3");
        adapter.addFragment(new FragmentFour(), "FRAG4");
        viewPager.setAdapter(adapter);
    
        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
    }
    
    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();
    
        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }
    
        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }
    
        @Override
        public int getCount() {
            return mFragmentList.size();
        }
    
        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }
    
        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
    

    public class FragmentOne extends Fragment {
    public FragmentOne() {
        // Required empty public constructor
    }
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
    
        return inflater.inflate(R.layout.fragment_one, container, false);
    }
    

    }

    public class FragmentFour extends Fragment {
    
    private EditText txt1, txt2, txt3;
    private Button button;
    
    public FragmentFour() {
        // Required empty public constructor
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view =  inflater.inflate(R.layout.fragment_four, container, false);
    
        txt1 = (EditText)getActivity().findViewById(R.id.txt1);
        txt2 = (EditText)getActivity().findViewById(R.id.txt2);
        txt3 = (EditText)getActivity().findViewById(R.id.txt3);
    
        button = (Button)view.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getData();
            }
        });
        return view;
    }
    
    private void getData() {
        String fragment1 = txt1.getText().toString();
        String fragment2 = txt2.getText().toString();
        String fragment3 = txt3.getText().toString();
    }
    

    来自文本1(片段)的数据始终为空:

    Data from text1 (fragment)always null

    我该怎么解决这个问题?

    5 回复  |  直到 7 年前
        1
  •  0
  •   ND1010_    7 年前

    你必须使用 存储FragmentOne数据,FragmentTwo数据,然后在保存按钮上检索到FragmentTree

        2
  •  0
  •   AskNilesh    7 年前

    为此,您可以使用共享首选项

    创建共享引用

    SharedPreferences pref = getApplicationContext().getSharedPreferences("DATA", MODE_PRIVATE); 
    Editor editor = pref.edit();
    editor.putString("EDITEXT1", "string value");  // Saving string data of your editext
    editor.commit(); // commit and save your data in to SharedPreferences
    

    现在按以下代码检索数据

    SharedPreferences pref = getApplicationContext().getSharedPreferences("DATA", MODE_PRIVATE); 
    String email=pref.getString("EDITEXT1", "");       // Saving string data of your editext
    
        3
  •  0
  •   Navneet Krishna    7 年前

    论据 例如,在片段之间传递数据

    Bundle bundle = new Bundle();
    bundle.putString("someEditTextData",someEditTextData);
    SomeFragment fragment = new SomeFragment ();
    fragment.setArguments(bundle);
    

    并检索所需片段中的数据,如下图所示

    Bundle args = getArguments();
        if (args != null) {
            showReceivedData.setText(args.getString("someEditTextData"));
        }
    
        4
  •  0
  •   Shailendra Yadav    7 年前

    ((MainActivity) getActivity()).filedName.setFragmentOneData(data);
    
        5
  •  -1
  •   J Ramesh    7 年前

    viewPager始终加载两侧的1个连续页面如果要访问片段1 editText数据,请添加此行

     viewPager.setOffscreenPageLimit(4);
    

    使用静态变量