2013-01-24 9 views
7

Mam mainActivity, który składa się z 3 aktywności fragmentu w pager widoku. Każdy fragment składa się z tekstów edycji .Jak uzyskać wartość edytowanego tekstu, gdy przesuń fragment w poziomie? Staram się robić jak this.below kodujak uzyskać dostęp do wartości edittext wewnątrz fragmentu, który jest w 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; 
    } 
} 


} 

podczas próby uzyskania dostępu do eddittext wewnątrz klasy pageZero jak poniżej

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

otrzymuję NULL value.help mnie out..Thanks z góry .

+0

@chnmaya można dostać jakieś rozwiązanie? – PankajAndroid

Odpowiedz

1

Aby stworzyć 3 różne fragmenty z widokiem na pager należy:

1) Utwórz FragmentActivity z widokiem na pager i adapterem widok pagera.

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) Tworzenie 3 fragmenty o przykład statycznego

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 widok pagera adapter z nim;

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

gdzie mogę uzyskać dostęp do edytora tekstu wewnątrz fragmentu? – chinmaya

5

Zmień klasa pagezero kod oncreateview tak .....

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

Powrót znajomy widok, a następnie użyć domyślny układ inflater ...

+0

Idealnie, prawie wszędzie szukałem rozwiązania. Dzięki, że uratowałeś mój dzień, Dzięki #Android Developer –

+0

Jeśli mogę zapytać, w jaki sposób zmiana 'inflater' na' getActivity(). GetLayoutInflater() 'help w tym przypadku? O ile mi wiadomo, to jest dokładnie to samo. Ponadto nie działa dla mnie. – Timmiej93

3

W czasie kliknięciu pole edittext, czy jest jakaś treść? Może powinieneś dostać tekst w zdarzeniu utraconych fokusów pola editekstu. W ten sposób można wprowadzić pierwszą część tekstu ...

Przykład:

name.setOnFocusChangeListener(new OnFocusChangeListener() { 

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

     } 
    }); 

Sposób spróbować uzyskać tekst wygląda prawo do mnie. Przynajmniej robię to w ten sam sposób.

w metodzie '' THE PagerAdapter GetItem powinna utworzyć instancję swoje fragmenty bezpośrednio:

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

only Viewpager wzywa GetItem jeśli chce utworzyć nowy element. Niestety nazwali metodę getItem, a nie createItem, która byłaby bardziej oczywista.

+0

debugger nie nadchodzi w zdarzeniu onclick .. – chinmaya

+0

można powiedzieć, gdzie należy uzyskać dostęp do edittext, aby uzyskać wprowadzoną wartość.? – chinmaya

+1

można użyć 'OnFocusChangeListener' 'code' name.setOnFocusChangeListener (nowa OnFocusChangeListener() { \t \t \t \t \t \t @Override \t \t \t public void onFocusChange (Zobacz v, logiczna hasFocus) { \t \t \t \t jeśli (hasFocus == false) { \t \t \t \t \t // uzyskać tekst ... \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; 
} 
} 

Następnie można uzyskać dostęp do publicznej statycznej nazwy EditText (po wygenerowaniu widoku dla niej) z innego fragmentu takiego jak ten.

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

Pozdrawiam. Proszę oznaczyć to jako poprawną odpowiedź, jeśli pomaga. Masz sporo odpowiedzi tutaj

0

Próbowałem poniżej kodu. Praca dla mnie

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

zdobycie EditText wewnątrz onClick blok ...

to oznaczać zmianę kodu z:

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

Do:

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; 
} 
Powiązane problemy