2013-01-24 11 views
7

Sto avendo mainActivity che consiste in 3 attività di frammento in un pager di visualizzazione. Un frammento è costituito da testi di modifica. Come ottenere il valore del testo di modifica quando strisciare il frammento orizzontalmente? Sto cercando di fare come this.below codicecome accedere al valore di edittext all'interno di un frammento che si trova in un viewpager

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


} 

quando provo ad accedere al eddittext all'interno della classe pageZero come qui di seguito

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

sto ottenendo nulla value.help mi out..Thanks in anticipo .

+0

@chnmaya è possibile ottenere qualsiasi soluzione? – PankajAndroid

risposta

1

di creare un 3 frammenti differenti con vista cercapersone è necessario:

1) Creare FragmentActivity con vista cercapersone e l'adattatore vista cercapersone.

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) Creazione di 3 frammenti con un'istanza statica

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) Riempire adattatore pager vista con esso;

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; 
    } 
} 
+4

dove posso essere in grado di accedere al edittext che si trova all'interno del frammento? – chinmaya

5

cambiare la classe pagezero codice di oncreateview come questo .....

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

Ritorna l'amico vista e poi usare gonfiatore layout di default ...

+0

Perfetto, ho cercato quasi ovunque per ottenere questa soluzione. Grazie, hai salvato la mia giornata, grazie #Android Developer –

+0

Se posso chiedere, come cambierebbe la funzione 'inflater' a' getActivity(). GetLayoutInflater() 'aiuto in questo caso? Per quanto ne so, questo è esattamente lo stesso. Inoltre, non funziona per me. – Timmiej93

3

Al momento si fa clic sul campo di edittext, c'è qualche contenuto? Forse dovresti ottenere il testo nell'evento focus perso del campo edittext. Così è possibile inserire del testo prima ...

Esempio:

name.setOnFocusChangeListener(new OnFocusChangeListener() { 

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

     } 
    }); 

Il modo in cui si tenta di ottenere il testo sembra giusto per me. Almeno lo faccio allo stesso modo.

In Metodo 'getItem' del PagerAdapter si dovrebbe istanziare i tuoi frammenti direttamente:

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

L'Viewpager chiamate solo getItem se vuole creare un nuovo elemento. Sfortunatamente hanno chiamato il metodo getItem e non createItem che sarebbe stato più ovvio.

+0

il debugger non sta arrivando nell'evento onclick. – chinmaya

+0

puoi dire dove devo accedere a edittext per ottenere il valore inserito? – chinmaya

+1

si potrebbe usare 'OnFocusChangeListener' 'Codice delle name.setOnFocusChangeListener (nuova OnFocusChangeListener() { \t \t \t \t \t \t @Override \t \t \t public void onFocusChange (Visualizza v, hasFocus booleano) { \t \t \t \t se (hasFocus == false) { \t \t \t \t \t // ottiene il testo ... \t \t \t \t} \t \t \t \t \t \t \t} \t \t}); – faceman

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

Quindi, è possibile accedere al nome statico pubblico di EditText (dopo che la vista è stata generata naturalmente) da un altro frammento come questo.

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. Si prega di contrassegnare questo come la risposta corretta se ti aiuta. Hai un bel po 'di risposte qui

0

Ho provato sotto il codice. Lavorare per 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; 
} 
3

ottenere il vostro EditText all'interno onClick blocco ...

Ciò significa modificare il codice da:

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

A:

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; 
} 
Problemi correlati