How to store the values of the controls of a Fragment with viewpager?

1

already implement several things and simply do not find as, good step to the point:  I have several fragments that I display with the viewpager, I want to save the data that is in the fragment controls, for this I have a function in the fragment to be saved, for that purpose create the function updateCaja ();

public class Fragment_Caja1 extends Fragment {
public Fragment_Caja1() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    final View v = inflater.inflate(R.layout.fragment_caja1, container, false);

    edt_caja1 = (EditText) v.findViewById(R.id.edt_caja1);

    return v;
}


public void updateCaja(int _id){
    ContentValues val = new ContentValues();
    val.put("caja1", caja1.getText().toString);
    SQLiteDatabase db = getActivity().openOrCreateDatabase("Caja", android.content.Context.MODE_PRIVATE, null);
    db.update("Caja",uEnc,"_id="+_id, null);
    db.close();
  }
}

I add the code of my main activity:

public class Activity_Caja extends AppCompatActivity implements Comunicador{

int id_tabla_caja1;

private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu.clear();
    getMenuInflater().inflate(R.menu.menu_encuesta, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.opc_guardar:
            actualiza(id_tabla_caja1);
            return true;
        case R.id.opc_cancelar:
            return true;
    }
    return super.onOptionsItemSelected(item);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lineabase);

    toolbar = (Toolbar) findViewById(R.id.tb_lin_bas);
    setSupportActionBar(toolbar);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
}


private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new Fragment_Caja1(), "Caja1");
    adapter.addFragment(new Fragment_Caja2(), "Caja2"));

    viewPager.setAdapter(adapter);
}


@Override
public void actualiza(int id) {

    FragmentManager fm = getSupportFragmentManager();
    Fragment_Caja1 f_c1 = (Fragment_Caja1 fm.findFragmentById(R.layout.fragment_caja1);

    f_c1.updateEncuesta(id);
}


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);
    }
  }
}

I use an interface:

public interface Comunicador {

public void actualiza(int id);

}

    
asked by Mark Dev 13.10.2016 в 20:52
source

1 answer

2

If I understood your question, the first thing you should do is that the fragment retain the information in the viewpager and then you should obtain the intangibles of said fragments in your case it would be something like that.

viewPager.setOffscreenPageLimit(2); // Esto es para que se retenga la informacion de los dos fragment funciona perfecto

now to get a fragment inside a "FragmentPagerAdapter"

Fragment_Caja1 f_c1;
Fragment_Caja2 f_c2;

if(adapter.getItem(0)!=null) {
  f_c1 = (Fragment_Caja1) adapter.getItem(0);
}

if(adapter.getItem(1)!=null) {
  f_c2 = (Fragment_Caja2) adapter.getItem(1);
}

Now you retain the information and you have the two fragments of the viewpager to manipulate them and now if you can make it easy because you already have the fragment intatas that are inside the viewpager.

f_c1.updateCaja(id);
f_c2.updateCaja(id);
    
answered by 13.10.2016 / 21:16
source