Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to access the value of edittext inside fragment which is in a viewpager

I am having am mainActivity which consists of 3 fragment activity in a view pager .each fragment consists of edit texts .How to get the value of the edit text when swipe fragment horizontally ? I am trying to do like this.below code

public class MainActivity extends FragmentActivity  {

int value = 0;
Context context;
String a = "";

SectionsPagerAdapter mSectionsPagerAdapter;


ViewPager mViewPager;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    // getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    setContentView(R.layout.activity_main);

    // Set up the action bar.
    //final ActionBar actionBar = getActionBar();
//  actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    mAddButtonB = (Button) findViewById(R.id.addnewB);

    mAddSearchV = findViewById(R.id.addnewSearch);
    mAddButtonB.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            mAddSearchV.setVisibility(View.GONE);
            mSectionsPagerAdapter = new SectionsPagerAdapter(
                    getSupportFragmentManager());
            mViewPager = (ViewPager) findViewById(R.id.customviewpager);
            mViewPager.setAdapter(mSectionsPagerAdapter);


        }
    });
        }



public class SectionsPagerAdapter extends FragmentPagerAdapter {

    PageZero p0;
    PageOne p1;
    PageTwo p2;

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
        p0 = new PageZero();
        p1 = new PageOne();
        p2 = new PageTwo();
    }

    @Override
    public Fragment getItem(int position) {


        switch (position) {
        case 0:
             return p0;
        case 1:
            return p1;
        case 2:
            return p2;
        }
        return null;
    }


    @Override
    public int getCount() {
        // Show 3 total pages.
        return 3;
    }


}
// PageZero = (Fragment1)getFragmentManager().findFragmentByTag("frag1");
public class PageZero extends Fragment {
 private  EditText name;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.componentname, container,
                false);
        name=(EditText)view.findViewById(R.id.nameTV);

        name.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                a=name.getText().toString().trim();
                Toast.makeText(getApplicationContext(),a,Toast.LENGTH_SHORT).show();


            }
        });/*(new OnKeyListener() {

            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // TODO Auto-generated method stub
                a=name.getText().toString().trim();
                Toast.makeText(getApplicationContext(), a,Toast.LENGTH_SHORT).show();
                return false;
            }
        });*/
        return view;
    }
}

public class PageOne extends Fragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.componentaddress, container,
                false);


        return view;
    }
}

public class PageTwo extends Fragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.componentmobno, container,
                false);
        return view;
    }
}


}

when i try to access the eddittext inside pageZero class like below

 name=(EditText)view.findViewById(R.id.nameTV);
 a=name.getText().toString().trim();

i am getting null value.help me out..Thanks in advance.

like image 516
chinmaya Avatar asked Jan 24 '13 08:01

chinmaya


People also ask

What is ViewPager?

Layout manager that allows the user to flip left and right through pages of data. You supply an implementation of a PagerAdapter to generate the pages that the view shows. ViewPager is most often used in conjunction with android.


2 Answers

Change the pagezero class oncreateview code like this .....

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view =getActivity().getLayoutInflater().inflate(R.layout.componentname,null);
        name=(EditText)view.findViewById(R.id.nameTV);

        name.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                a=name.getText().toString().trim();
                Toast.makeText(getApplicationContext(),a,Toast.LENGTH_SHORT).show();


            }

 return view;
        });

Return the view friend and then use default layout inflater...

like image 164
Venkatesh S Avatar answered Sep 19 '22 08:09

Venkatesh S


At the time you click the edittext field, is there any content? Maybe you should get the text in the lost focus event of the edittext field. Thus you can enter some text first...

Example:

name.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(hasFocus == false){
                //get text from edittext field...
            }

        }
    });

The way you try to get the text looks right to me. At least I do it the same way.

In the PagerAdapter's 'getItem' Method you should instantiate your fragments directly:

@Override
public Fragment getItem(int position) {     
    switch (position) {
        case 0:
            return new PageZero();
        case 1:
            return new PageOne();
        case 2:
            return new PageTwo();
    }
    return null;
}

The Viewpager only calls getItem if it wants to create a new item. Unfortunatly they called the method getItem and not createItem which would be more obvious.

like image 38
faceman Avatar answered Sep 17 '22 08:09

faceman