我有一个小项目,其中包含一些输入组件,其中我试图获得某些按钮点击的值。 EditText值始终返回空和ToggleButton值 - 默认为false。我在这里错过了什么?为了简洁,我发出了大部分造型。
fragment_addnewitem.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/addNewItemFragment"
tools:context=".controller.AddNewItemFragment"
tools:showIn="@layout/activity_addnewitem">
<EditText
...
android:id="@+id/itemNameInput"
android:inputType="text"
.../>
<Button
...
android:id="@+id/saveButton"
android:onClick="saveItem"
android:text="SAVE"
.../>
</android.support.constraint.ConstraintLayout>
activity_addnewitem.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/addNewItem"
tools:context=".controller.AddNewItem">
<include layout="@layout/fragment_addnewitem" />
</FrameLayout>
AddNewItemFragment.java:
public class AddNewItemFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_addnewitem, container, false);
return rootView;
}
AddNewItemActivity.java:
public class AddNewItem extends AppCompatActivity {
private Item item;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Item item = new Item();
setContentView(R.layout.activity_addnewitem);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().add(R.id.addNewItemFragment, new AddNewItemFragment()).commit();
}
public void saveItem(View view) {
//empty
item.setName(((EditText)findViewById(R.id.itemNameInput)).getText().toString());
}
}
当然我有更多的组件设置,但从代码角度看它们几乎相同。我还有一个带有OnDateSetListener的日期选择器设置,并且可以按预期工作。但EditText或ToggleButton都没有改变它们的值。
答案 0 :(得分:0)
在 super()之后,在 onCreate()中,您创建了另一个Item对象,其名称与字段Item相同。这是影子。然后在 setContentView()之前创建Item对象。
我对你的课程进行了一些修改:
public class AddNewItem extends AppCompatActivity {
private Item item;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_addnewitem);
item = new Item();
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.addNewItemFragment, new AddNewItemFragment())
.commit();
}
}
public void saveItem(View view) {
//empty
item.setName(((EditText)findViewById(R.id.itemNameInput)).getText().toString());
}
}
答案 1 :(得分:0)
不知道为什么,但以下几行导致了EditTexts的问题:
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().add(R.id.addNewItemFragment, new AddNewItemFragment()).commit();
}
删除它们并且EditTexts现在按预期工作,但我填充在Fragement上的Spinner不再填充,并且ToggleButtons总是返回false(isSelected())。