[英]Get Value from programmatically added edittext in fragment
我有一个片段 。 在该片段中,我以编程方式创建edittext小部件,如下所示:
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);
那么,当我在MainActivity中按下按钮时,如何从片段中获取edittext值?
用新代码更新
这是我的主要活动
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);
}
这是我的片段
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();
}
}
试试这个,它将所有EditText文本保存在String数组中
String[] strings = new String[](driverItemArray.length);
for(int i=0; i < driverItemArray.length; i++){
string[i] = driverItemArray[i].getText().toString();
}
做到这一点的方法是使用回调模式。 因此,当您制作片段时,它将接受一个接口。 调用按钮时,它将在该接口上调用一个方法。 然后,活动可以是实现接口以接收事件的活动。 Android Studio甚至可以为您创建样板。
在你的片段里面
@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");
}
}
在按钮上,单击侦听器
onReturnValue(driverItem.getText().toString())
接口本身
公共接口OnFragmentInteractionListener {void onReturnValue(String driverItem); }
活动
public class MyActivity implements OnFragmentInteractionListener {
....
public void onReturnValue(String value) {
//youre inside the activity now so use the value
}
}
在您的片段中,将driverItem声明为全局变量和此方法:
public String getEditTextValue() {
return driverItem.getText().toString().trim();
}
在活动中,您有一个片段实例。 然后调用上面的方法:
String value = fragmentInstance.getEditTextValue();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.