2016-08-09 11 views
0

erhalten Ich habe ein Fragment. Innerhalb dieses Fragment erschaffe ich EditText programmatisch Widgets wie folgt:Wert von programmatisch hinzugefügtem Editiertext in Fragment

driverItem = new EditText(getContext()); 
driverItemArray.add(driverItem); 
driverItem.setId((int) dataSnapshot.getChildrenCount()); 
driverItem.setHint(people.getItem()); 
driverItem.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 
lin.addView(driverItem); 

Wie kann ich die EditText Werte von meinem Fragment erhalten, wenn eine Schaltfläche in meinem MainActivity drücken?

UPDATE MIT NEUEN CODE

Hier ist meine Mainactivity

public class MainActivity extends AppCompatActivity implements DriverFragment.OnFragmentInteractionListener{ 

private SectionsPagerAdapter mSectionsPagerAdapter; 
private ViewPager mViewPager; 
private TabLayout tabLayout; 

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


    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.container); 
    mViewPager.setOffscreenPageLimit(3); 

    setupViewPager(mViewPager);//mViewPager.setAdapter(mSectionsPagerAdapter); 

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

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
      //  .setAction("Action", null).show(); 


    //BUTTON FIRES AND GET THE VALues FROM FRAGMENT 
      onReturnValue(s); 

     } 
    }); 
} 


private void setupTabIcons(){ 
    tabLayout.getTabAt(0).setIcon(tabIcons[0]); 
    tabLayout.getTabAt(1).setIcon(tabIcons[1]); 
    tabLayout.getTabAt(2).setIcon(tabIcons[2]); 
} 

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFragment(new DriverFragment(), ""); 
    adapter.addFragment(new ErrorFragment(), ""); 
    adapter.addFragment(new InfoFragment(), ""); 
    viewPager.setAdapter(adapter); 
} 

@Override 
public void onReturnValue(String driverItem) { 
    System.out.println(driverItem); 
} 

Hier ist mein Fragment

public class DriverFragment extends Fragment{ 
ListView listView; 

List<String> driverItemArray = new ArrayList<String>(); 

private OnFragmentInteractionListener mListener; 

public DriverFragment(){ 

} 

public interface OnFragmentInteractionListener { 
    void onReturnValue(String driverItem); 

} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    if (context instanceof OnFragmentInteractionListener) { 
     mListener = (OnFragmentInteractionListener) context; 
    } else { 
     throw new RuntimeException(context.toString() 
       + " must implement OnFragmentInteractionListener"); 
    } 
} 

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Firebase.setAndroidContext(getActivity()); 
} 

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

    View view = inflater.inflate(R.layout.fragment_driver,container,false); 
    listView = (ListView) view.findViewById(R.id.listViewDriver); 

return view; 

} 

@Override 
public void onStart(){ 
    super.onStart(); 
    FirebaseListAdapter<String> adapter = new FirebaseListAdapter<String>(
      getActivity(), 
      String.class, 
      R.layout.textview_layout, 
      mRootRef) { 
     @Override 
     protected void populateView(View view, String s, int i) { 
      TextInputLayout textInputLayout = (TextInputLayout)view.findViewById(R.id.input_layout); 
      EditText editText = (EditText)view.findViewById(R.id.input_edittext); 
      editText.setId(i); 
      textInputLayout.setHint(s); 
      driverItemArray.add(s); 
     } 
    }; 
    listView.setAdapter(adapter); 
    Toast.makeText(getActivity().getApplicationContext(), listView.getAdapter().getCount()+"", Toast.LENGTH_SHORT).show(); 
} 

}

Antwort

0

Versuchen Sie, diese wird es alle EditText Text in String Array speichern

String[] strings = new String[](driverItemArray.length); 
for(int i=0; i < driverItemArray.length; i++){ 
    string[i] = driverItemArray[i].getText().toString(); 
} 
+0

Mein MainActivity und Fragment sind zwei verschiedene Dateien, damit ich gewohnt den String erreichen –

+0

Sie String-Array Ihr Fragment Absicht –

-1

in Ihrem Fragment erklären driverItem als globale Variable und diese Methode:

public String getEditTextValue() { 
return driverItem.getText().toString().trim(); 
} 

Von Aktivität Sie haben eine Instanz das Fragment. Rufen Sie dann oben Methode:

String value = fragmentInstance.getEditTextValue(); 
0

Der Weg dazu ist mit dem Callback-Muster. Wenn Sie also das Fragment machen, akzeptiert es eine Schnittstelle. Wenn die Schaltfläche aufgerufen wird, ruft sie eine Methode für diese Schnittstelle auf. Die Aktivität kann dann diejenige sein, die die Schnittstelle implementiert, um das Ereignis zu empfangen. Android Studio ist sogar in der Lage, das Muster für Sie zu erstellen.

In Ihrem Fragment

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    if (context instanceof OnFragmentInteractionListener) { 
     mListener = (OnFragmentInteractionListener) context; 
    } else { 
     throw new RuntimeException(context.toString() 
       + " must implement OnFragmentInteractionListener"); 
    } 
} 

Auf der Taste klicken Zuhörer

onReturnValue(driverItem.getText().toString()) 

Die Schnittstelle selbst

öffentliche Schnittstelle OnFragmentInteractionListener { void onReturnValue (String driverItem); }

Die Aktivität

public class MyActivity implements OnFragmentInteractionListener { 
    .... 

    public void onReturnValue(String value) { 
     //youre inside the activity now so use the value 
    } 
} 
+0

Verwendung passieren kann ich mehrere EditText haben. Ist es möglich, alle Werte auf einmal zu erhalten? –

+0

Vielleicht implementiere ich es falsch, aber das driverItem ist in dem Fragment erstellt, so dass ich nicht sehen kann, wie ich das ** onReturnValue() ** in meinem ** MainActiviy ** –

+0

verwenden kann Dies ist ein wirklich grundlegendes Muster, das Sie brauchen um zu lernen, Fragmente zu benutzen.Versuchen Sie, dies dann zu lesen: https://developer.android.com/training/basics/fragments/communicating.html –

Verwandte Themen