chinmaya
chinmaya

Reputation: 111

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.

Upvotes: 8

Views: 17318

Answers (6)

Ramin Bateni
Ramin Bateni

Reputation: 17415

Get your EditText inside onClick block...

This mean change the code from:

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) {
                  a=name.getText().toString().trim();
                  Toast.makeText(getApplicationContext(),a,Toast.LENGTH_SHORT).show();
             }
        });

    return view;
}

To:

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

        name.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {

                  // GET EDIT TEXT HEAR:
                  EditText name=(EditText)view.findViewById(R.id.nameTV);

                  a=name.getText().toString().trim();
                  Toast.makeText(getApplicationContext(),a,Toast.LENGTH_SHORT).show();
             }
        });

    return view;
}

Upvotes: 3

Vijay
Vijay

Reputation: 2067

I tried below code. Working for me

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    View v =  inflater.inflate(R.layout.fragment_main_explore, container, false);
    ed1 = (EditText)v.findViewById(R.id.editTextTemp);
    if( ed1 == null )
    {
        Toast.makeText(getActivity(), "ERROR UNABLE TO GET EDIT", Toast.LENGTH_LONG).show();
    }


    // Inflate the layout for this fragment
    //return inflater.inflate(R.layout.fragment_main_explore, container, false);
    return v;
}

Upvotes: 0

Tash
Tash

Reputation: 196

public class PageZero extends Fragment {
   public static  EditText name;   //change this to public static

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

    return view;
}
}

Then, you can access the public static EditText name (after the view for it has been generated of course) from another fragment like this.

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

   EditText page_one_text = PageZero.name;   //you can get that variable in any fragment now, but using the class name of that fragment to access it

    return view;
}
}

Cheers. Please mark this as the correct answer if it helps you. You have quite a bit of answers here

Upvotes: 0

faceman
faceman

Reputation: 1328

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.

Upvotes: 3

Venkatesh S
Venkatesh S

Reputation: 5492

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...

Upvotes: 5

NewStack
NewStack

Reputation: 990

To create a 3 different fragments with view pager you should:

1)Create FragmentActivity with view pager and view pager adapter.

public class FragmentActivity extends FragmentActivity
{
    private FragmentAdapter adapter;
    private ViewPager pager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment);     
        adapter = new FragmentAdapter(getSupportFragmentManager());
        pager = (ViewPager) findViewById(R.id.pager);
        pager.setAdapter(adapter);
   }

2)Create 3 Fragments with static instance

public final class Fragment1 extends Fragment
{   
    public static Fragment1 newInstance() {
        return new Fragment1();
    }

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        LinearLayout layout = new LinearLayout(getActivity());
// your fragment xml view
        return view;
    }
}

3)Fill view pager adapter with it;

public class FragmentAdapter extends FragmentPagerAdapter

{    
    public InstallFragmentAdapter(FragmentManager fm) {
        super(fm);
    }
    @Override
    public Fragment getItem(int position) {     
        switch (position) {
            case 0:
                return Fragment1.newInstance();
            case 1:
                return Fragment2.newInstance();
            case 2:
                return Fragment3.newInstance();
        }
        return null;
    }
}

Upvotes: 1

Related Questions